1832 字
9 分钟
训练记录
11.24
学
待学
- 扫描线算法
- 线性基
- 莫比乌斯函数和莫比乌斯反演
待写
- 2025ICPC上海补题
11.25
学
11.26
- 思维题
- 2077A(重排后进行阿贝尔变换, 使构造出的结果必然大于最大值)
- 2072E(暴力即可, 无营养)
- 2057C(注意到最大值的情况是两0一1或一0两1, 所以若一个数为0, 一个数为1, 剩下一个数可以取任何值. 再注意到排除相同高位数字后, 区间内必然存在…1000…和…0111…, 此时无论第三个数怎么取都不影响结果)
- 2049C(先考虑不含x, y的情况, 环状地填入. 含x, y的情况就是两个环合并起来)
- 2026C(设免单的数量为k, k的合理性显然满足二分条件, 能想到就能做出来)
- 1924A(很难想到的一个贪心, 构造针对性反例, 每次取最差情况)
- 1891C(模拟即可, 无营养, 但还是交了好几发, 说明耐心和思维缜密程度还远远不够)
- 1873G(正解极其巧妙)
- 1814C(典型贪心, 思想类似哈夫曼编码, 无营养)
- 1809C(非常有趣的题目, 隐藏的逆序对问题)
- 1800E2(思维不难, 但是有一些小细节)
11.27
- 思维题
- 1774B(不难)
- 1767D(结论好猜)
- 1753A2(1和-1的数量只能是偶数, 因为每个1或-1都会使sum奇变偶, 偶变奇; 在知道这个性质之后, 可以两个两个分组构造)
- 1742F(水题懒得说)
- 1740D(类似华容道的结构)
- 1739C(博弈论+组合数学)
- 1737C(简单, 但还是交了好几发)
- 1722G(不难, 注意debug的耐心)
- 1710A(题目引导很多, 注意开long long)
- 1646C(为什么冒出来一道搜索, 注意好unsigned整数的使用方式)
- 1630A(位掩码, 不难但巧妙)
- 1614C(正解极为巧妙, 震撼人心. 结论惊为天人, 涉及范围广, 包括按位与, 按位或, 按位异或, 快速幂, 组合数学, 但代码和结论非常简洁)
11.28
11.29
- 最短路
- 比赛
11.30
周日休息.
- 补题
12.01
-
思维题
- 743C(简单的构造, 不过非常有趣)
-
补题
-
dp
-
图论
-
待补
12.02
- dp
- P1060(典型背包)
- P1855(二维背包)
- P1757(分组背包)
- P2946(背包+模运算)
- P1352(树形)
- P1122(树形dp板题)
- P2679(二维线性dp)
- P3558(注意开ll, 注意开ll, 注意开ll)
- P5020(vis标记)
- P1064
- 607B(区间dp典题, 分包裹和切分两种情况)
- Atcoder DP Contest A(线性dp)
- Atcoder DP Contest B(线性dp)
- Atcoder DP Contest C(线性dp)
- Atcoder DP Contest D(典型0-1 背包)
- Atcoder DP Contest E(0-1 背包, 值域互换)
- Atcoder DP Contest F(LCS + 倒推)
- Atcoder DP Contest G(dp on DAG)
- Atcoder DP Contest H(二维线性dp)
- Atcoder DP Contest I(概率dp)
- Atcoder DP Contest J(期望dp)
- Atcoder DP Contest K(dp + 博弈论)
12.03
- dp
- Atcoder DP Contest L(区间dp板题)
- Atcoder DP Contest M(背包 + 前缀和优化)
- Atcoder DP Contest N(典型区间dp)
- Atcoder DP Contest O(状压dp)
- Atcoder DP Contest P(树形dp)
- 1324F(换根树形dp)
- cses1132(求所有节点作为起点的最长路, 换根树形dp)
- 455A
- 987C
- 118D(典型的连续段计数DP)
- P1063(区间DP)
- VP
- 补题
- 2169C(十分巧妙的前缀和)
12.04
12.05
- 树状数组
- 比赛
12.06
- 树状数组
- 274545A
- SPOJ K-Query(典型)
- SPOJ Crayon(正难则反)
- cses1734(维护每个数的最后出现位置, 离线查询)
- 1234D(维护每个字母的所有出现位置, 可以用std::set也可以用树状数组)
- 比赛
- dp
- B3637(LIS)
12.7
周日休息.
- 补题
12.8
-
VP
-
补题
- i < j, 即原问题等价于求所有长度大于1, 逆序数量>=1的子段和
- 等价于所有长度大于1的子段和数量 - 长度大于1, 逆序数量等于0的子段和数量
- 若某子段的逆序数量等于0, 则该子段一定单调递增. 即该子段一定包含于某个极大递增子段. 反过来说, 对于每个极大递增子段, 其子段一定单调递增.
- 这时问题转化为, 求原数组的一个分割L1, L2, …, Lm, 使得所有部分的子段数量和为k. 即背包问题, 取len个时贡献为len * (len - 1) / 2, 所有len相加等于n.
- 一个维度枚举所有终点, 另一个维度枚举所有len即可, 同时记录转移方向, 最后输出.
-
待补
- 2175D(真的复杂)
12.9
12.10
今天实在太困了, 摆一天, 明天补回来.
12.11
-
训练
-
比赛
- codeforces round 1070 div.2赛时2题(ab) 状态更差的一天, 非常困, 喝了咖啡还是无法缓解, 再调整一天.
12.12
- 打卡
顶不住了, 我需要休息.
12.13
12.14
- 周日休息
- 打卡
12.15
- 打卡
12.16
- 打卡
12.22
12.23
12.24
- 补题