讲题备用列表
CF1781G:树,构造,大力分讨: 贪心选择,证明合法
CF1774G:区间,计数,奇偶抵消,构造树形结构: 删除无效区间,其余选下一个,形成树形结构
CF1746E2:交互,缩小区间,dp 计算最优策略: 大约每次可减 1/4,充分利用上一次的询问,最后 dp 防止被卡
CF1672G:计数,推性质,构造二分图,图上取生成树技巧: 对于每个问号 \((i,j)\) 连接左 \(i\) 和右 \(j\),形成图要求每个点连出边权异或和为 0,生成树技巧
CF1666K:网络流,最小割模型,拆点建图,重新赋边权技巧: \(SS=A,TT=B,ST=TS=C\) 即可。
CF1656H:构造,不断减小集合直至合法,minmax 性质缩小值域: 不断扔掉不合法的数直至合法,线段树维护是否合法,\(\gcd(\mathrm{lcm})\) 控制值域,不用高精
CF1638F:大力分讨,推性质: 分不交,包含,部分相交讨论
CF1621G:拆贡献,复杂度分析: 上升子序列总长度很容易算,考虑每个点后面最后一个大于它的位置减掉贡献,发现对每个位置只用处理 \([v_{i-1},v_i)\) 范围内的数,均摊 \(n\log n\)
CF1608F:dp,计数,mex 相关问题: \(f(i,j,k)\) 表示第 \(i\) 位,当前 \(\mathrm{mex}\) 值为 \(j\),大于 \(\mathrm{mex}\) 的值等价类个数为 \(k\) 方案数,后两位和固定,前缀和优化
CF1603E:dp,上下界优化,性质转化,时间复杂度分析: \(f(mn,i,j,k)\) 表示最小值为 \(mn\),剩下 \(i\) 个位置,当前超出 \(mn\) 的大小为 \(j\),当前数大小为 \(mn+k\)。由于 \(mx\times mn\ge i\times mn\),故 \(j\) 大小是 \(O(mn)\) 级别的。再发现 \(mn\le n-2\sqrt{n}\) 时一定无解,经过分析复杂度 \(O(n^3\sqrt{n})\)。
CF1656G(未实现):魔怔构造: 先随便弄几个环,然后将环两两合并。
CF1598G:垃圾哈希: 发现较长那个数的 \(\mathrm{lcp}\) 要到与较短串只差 1 为止,做完了。
CF1578D:分形,推性质,巧妙构思题: 将斜线旋转 \(45^\circ\) 并缩小 \(\sqrt 2\) 倍贴到坐标轴上,坐标大致减半,发现第 \(1\) 条线方向永远为 \((0,0)\to (1,0)\to (1,1)\to (0,1)\to (0,0)\),于是确定线的方向,递归处理,即可得假设在第一条线上的位置。因为某种原因,当且仅当递归到最后线段是在 \((0,0)\) 时找对线。(神仙题解做法看不懂)
CF1566H:交互,随机化,莫反,调整,数学,脑洞大开: 随便莫反得到 \(a'_x\) 为所有满足 \(y\) 将质因子去重后得到 \(x\) 的 \(a_y\) 异或和,于是变成若干个集合 \(S\),每个集合选若干个数异或得 \(a'_i\),要求一共恰好选 \(n\) 个数。每个集合构建线性基,不断逼近至 20 步以内,然后分集合大小各种微调即可。
CF1519F:爆搜,网络流,匹配,神秘,Hall 定理: 转化成 Hall 定理即选出若干条边,使得存在左部点到右部点的完美匹配,一种做法是直接爆搜(不会证?),题解做法记 \(f(f_1,f_2,\dots,f_6,i,j,r)\) 表示左部点流量分别为 \(f_1\sim f_6\),当前处理到右部第 \(j\) 个点,左部第 \(i\) 个点,右部第 \(j\) 个点还剩 \(r\) 的流量。
CF1540D:数据结构,分块,线段树,复杂度分析,转化: 令 \(a_i\leftarrow i-a_i\),整个过程变成 for(int i=x+1;i<=n;i++) if(ans>=a[i]) ans++;
,分块维护进来 \(X\) 时出去为 \(x_X\),每块只用维护 \(O(B)\) 个分界点,块内线段树支持单点 \(O(B)\) 修改,查询 \(O(n/B)\) 次暴力 upper_bound
,复杂度 \(O(n\sqrt{n\log n})\)(有单根号做法不想写)
CF1517F:dp,转化,拆贡献,换思路方向: 对每个 \(R\) 考虑答案 \(<R\) 的方案数,那么每个未选的点半径为 \(R\) 能覆盖全集。令 \(f_{u,i,j}\) 表示 \(u\) 子树内最浅未选点深度为 \(i\),最深未覆盖点深度为 \(j\),发现如果 \(i\) 和 \(j\) 都有值,那么最终覆盖 \(j\) 的链会严格由于 \(i\) 这条链,于是 \(f_{u,i,j}\) 拆成 \(f_{u,i}\) 和 \(g_{u,j}\),树形背包就单次 \(O(n^2)\) 了。(一开始的想法是钦定一些点必选,设 \(f_{u,i,j}\) 表示 \(u\) 子树内已选最深点为 \(i\),伸进去的链长度至多为 \(j\),怎么这个就没有决策覆盖呢/fn🤬)
CF1776K:多项式,近似,积分,期望和概率,\(\ln\&\exp\): 对距离为 \(t\) 的人 \(k\) 次胜利的概率为 \([x^k]\frac{1}{t}\prod\limits_{i=0}^{t-1}(1+\frac{x}{i})\),两边取 \(\ln\),右边会有一个类似 \(\sum\limits_{i=a}^b k^{-i}\) 的东西,这个前缀预处理若干个项,后面用积分算。
CF1483E:交互,dp,决策点,毛估估就行: 倍增完 \(L\) 之后令 \(d=R-L\),毛估估一下发现大概有 \(d<<L\),于是考虑以当前钱数至少为 \(i\times L+d\) 来作为状态,设 \(F(d,j)\) 表示当前钱数至少为 \(j\times L+d\) 时需要的最小次数。由于 \(d\) 值域很大,因此考虑值域和定义域翻转,即令 \(f(i,j)\) 表示只用 \(i\) 次操作,钱数为 \(j*L+d\) 时,\(d\) 的最大值为多少。有转移 \(f(i,0)=f(i-1,1),f(i,j)=f(i-1,j-1)+f(i-1,j+1)\),求得 \(f(50,0)>10^{14}\),于是至多用 50 次。注意 \([L,R]\) 转移到 \([m,R]\) 时钱数由 \(j\times L+d\) 变成 \(j\times L+2m+d-m\) 而非 \((j+1)m+d-m\),题解说这两者之差可以用至多 3 个初始 \(L\) 来补贴,没有证明!
CF1510H(未实现):树上 dp,树上背包: (注意一个父区间选的区间可能是子孙中的一个子区间!口胡时没想到)设 \(f(u,l,r,k)\) 表示 \(u\) 节点,区间左/右端点是否将来会被覆盖,区间内将来还会选 \(k\) 个区间的最大值。合并子树时维护一个 \(r\) 表示当前右端点是否将来被盖即可,树形背包复杂度 \(O(n^2)\)。
CF1470E:时间复杂度分析,均摊,分叉点: 考虑每个询问至多被叉开 \(c\) 次,于是递归时暴力扫哪些询问会叉开,时间复杂度即正确。
CF1738H:PAM 回文串自动机,lazy tag 技巧: 发现删除一定在叶子结点,于是在叶子节点打当前最右位置标记并在叶子被删时向上推。
CF1740H:动态树链剖分,维护轻儿子技巧,以矩阵维动态 dp 技巧: 对每个点维护其轻儿子集合,得到一个三元组 \((x,y,z)\),代表其重儿子为 \(x\) 时其值为 \(y\),否则其值为 \(z\)。这个三元组支持合并,于是树剖维护并动态更新即可。
CF1737F:构造,大力分讨,放缩: 发现一个指数为 \(x\) 的就占了因数个数的 \(\frac{x-2}{x}\),于是 \(x\le 3\),判一判即可。
CF1726G:值域分治,质因数分解分治,容斥,大胆 dfs: 首先将答案容斥为 \(\sum \prod\limits_{p_i} C/p_1p_2\dots p_k\),将质数分为 \(\le C\) 和 \(>C\) 两部分,\(\le C\) 的部分通过前缀和得出区间中有哪些,直接暴力 dfs + 记忆化搜索 + 容斥,复杂度无证明;\(>C\) 的部分发现即为 \(\sum\limits_{i=1}^{\lfloor C/p \rfloor} [\gcd(C/p,\prod a_i)=1]\),只和 \(\lfloor C/p \rfloor\) 有关,于是莫队维护 \(\lfloor C/p \rfloor=x\) 的数量即可。