弱智错误+小trick集合
这里就不区分错误和trick了
不定期更新
1、多维dp的时候一定要计算空间复杂度,必要时可以考虑滚动或者卡卡边界
2、dp的东西和匹配相关的时候,可以考虑将每组匹配拆开dp,即记录一维表示当前有多少个点已经被选作了匹配的一个点但是另一个点尚未确定
3、dp的东西意义有“连续\(m\)个至少有一个/不能有连续\(m\)个”的序列的时候,我们可以记录\(f_i\)表示长度为\(i\)的合法序列,同时从\(f_{i-1},f_{i-2},...,f_{i-m}\)转移
4、求序列中是\(d\)的倍数的个数的时候,除了\(O(n\sqrt a_i)\),还有\(O(a_i \log a_i)\)的做法,根据需要选择
5、(接着上面的)记\(f(d)\)为序列\(gcd=d\)的合法序列个数,求解\(f(1)...f(m)\)时可以考虑求解\(g(d)\):序列中所有元素都是\(d\)的倍数的合法序列个数。之后再和4一样运用调和级数进行求解
注:4和5本质上都是莫比乌斯反演,一个关于调和级数在莫比乌斯反演上的经典应用可以参见:http://uoj.ac/problem/62
6、期望dp写不出来的时候考虑倒着写
7、线性求逆元:\(inv[i]=inv[p\text%i]*(p-p/i)\% p\)
8、位运算的组合运算具有交换律
9、对某个数和一个序列中的数的异或最值的问题,一般考虑按位贪心,有些计数问题还会考虑贪心+分治
10、树/图中某点经过权值不超过\(d\)的边所能到达的点:\(\kruskal\)重构树上\(d\)对应的点的子树
\(\kruskal\)重构树上有点权的点,其点权随深度的递增而递降
11、二分的时候,注意\((l+r)>>1\)的中间过程有可能爆int
12、\(a_1,a_2,\cdots,a_n\)中,\(gcd(a_1,a_2,...,a_i)\)的不同取值有\(\log a_i\)个(\(x\)的因数个数为\(\log x\)个)
13、对无环图有:点数-边数=连通块数
14、倍增的时候不要忘记最后对边角块的处理
15、差分约束系统最短路建图求得的为最大解
16、wqs二分时注意\(f_i\)可能为负,会影响移项,同时尽可能的增加二分次数以保证精度
17、Long Double使用%Lf输出
18、网络流初始化时all=1