-
[n race m ][n rack m ]
$$n race m$$
$$n rack m$$
-
最大流一定要成对加边,否则^1时编号就乱了
-
(阿狸的打字机)dfs进入时树状数组上 Modify(dfn[u], 1) 回溯时 Modify(dfn[u], -1),可以用子树和求从根到 u 的链的一部分
-
处理1-n的阶乘和阶乘逆元以后 可以O1算1-n某个数的逆元 (fac[x-1]*ifac[x])
-
cdq分治可以用std::merge
-
正下标:
(maxlimits_{1leq n leq n})
maxlimits_{1leq n leq n}
如果直接limits布星就mathop括起来:$$mathop{left[ egin{matrix}
0& 0& 0
0& 0& 0
0& 0& 0
end{matrix}
ight]}_{123}$$
mathop{left[ egin{matrix}
0& 0& 0\
0& 0& 0\
0& 0& 0\
end{matrix}
ight]}_{123}
-
模任意数n的意义下,1..n 的逆元互不相同
-
位运算的东西一定要想想按位考虑
-
DFT->快速幂->IDFT这种做法需要满足长度次方不大 就是代码里的nw要开到长度次方以上,否则多出来的会被模回去(NTT/FFT是循环卷积),不求循环卷积 长度*次方又很大只能ln+exp
-
森林点数-边数=连通块数
-
状压DP有用状态很少可以用map存 (据说司机这样过掉了应该只拿40分的题)
-
并查集merge时 if ((x = Find(x)) == (y = Find(y)) return (好像以前直接fa[x]=y出过问题来着= =
-
做题先把样例手算完,代码过不了样例按照代码模拟样例
-
对拍 对拍 对拍 对拍
-
线段树维护区间最大子段和的null.sum不能是-inf
-
斜率优化如果已经维护出了凸壳,不要管什么设 j<k且j比k优,从而推出一个j和k的斜率跟某个与i相关的量的大小关系。这样太麻烦,直接比较DP(sta[i]转移到i), DP(sta[i+1]转移到i),如果sta[i+1]更优就++top; (凸壳上函数是单峰的)
-
相乘为完全平方数的两个数,满足 其中一个数为0 或者 将他们的完全平方数因子除掉,得到的数相同
-
非质数的最小质因子最大是 (sqrt n) 级别的,可以记忆化存一些函数值 比如 (sigma_k) (所有因子的k次幂之和) 可以记忆化存下所有的 (sigma_k(p^k)) 减少计算量
n=k=1e7,线性筛要用到的 (sigma_k) 中 (p) 和 (r) 最大仅为 (3137) 和 (23)