一些有趣的小技巧

1.看到选 \({n\over 2}+1\)个,可以考虑分组贪心,例如 CF798D,

2.看到维护回溯操作的题,可以考虑可持久化或者操作树,例如 CF707D

3.看到恰好....,可以考虑容斥加二项式反演,例如 P4859P4491

4.正着做比较麻烦的话,可以考虑倒着做,例如 P3998

5.至多和恰好之间的转化: \(f(n) = \displaystyle\sum_{i=0}^{n} {n\choose i}g(i)\Leftrightarrow g(n) = \displaystyle\sum_{i=0}^{n}(-1)^{n-i}{n\choose i}f(i)\)

6.至少和恰好之间的转化:\(f(k) = \displaystyle\sum_{i=k}^{n}{i\choose k}g(k)\Leftrightarrow g(k) = \displaystyle\sum_{i=k}^{n}(-1)^{i-k}{i\choose k}f(i)\)

7.求 \(A[i] = \displaystyle\sum_{i=k}^{n} B[i] \times C[i-k]\) 这样的差卷积的形式的时候,可以把 \(B(x)\) 的每一项反转来构造一个卷积。

8.两个数异或相当于二进制每一位在模2意义下的加法,例如 ARC115A

9.\(C_k = \displaystyle\sum_{i+j=k}A_j \bigoplus B_j\) 可以转化为 \(C_k = \displaystyle\sum_{i+j=k} A_i\times (1-B_j) + (1-A_i)\times B_j\)。 例如:ABC196F

10.看到 \(x+a_i\)\(\max(a_i,x)\), \(\min(a_i,x)\) 可以考虑把函数图像画出来,找一下性质。例如:ABC196E

11.若删除操作比较麻烦的话,可以考虑线段树分治,例如线性基的删除操作。

12.区间dp如果 \(O(n^3)\) 的转移过不去的话,可以考虑枚举长度然后左右两边合并。例如 CF1114D

13.求区间第 \(k\) 大的三种方法:二分,主席树/k-Dtree直接维护,每次确定第 \(j\) 大的区间范围,把这个区间分裂为两个区间继续求解第 \(j+1\) 大的区间范围。例如:P2048 [NOI2010] 超级钢琴

14.下降幂和组合数相乘的性质: \(\displaystyle k^{\underline m}{n\choose k} = n^{\underline m}{n-m\choose k-m}\), 例如 P6667 如何优雅的求和

15.\(n\) 个有标号的点 \(m\) 条边的无向连通图,分为 \(k\) 联通块,加 \(k-1\) 边使整张图变成一棵树的方案数为 \(n^{k-2}\prod_{i=1}^{k} s_i\)\(s_i\) 表示每个联通块的大小)

16.求连通块的数量可以转化为点数-边数,例如: CF1151E

17.\(dp\) 优化的话可以考虑分治dp,斜率优化dp,决策单调性,矩阵快速幂优化dp,单调队列优化dp,等等。

posted @ 2021-03-11 15:09  genshy  阅读(181)  评论(1编辑  收藏  举报