一些套路的备忘笔记
杂项
-
baka's trick:尺取法可以不用删除做到线性,前提是合并两个连续段答案的复杂度比较低。
-
指定某两个结构的元素不交,可以考虑随机黑白染色,当结构比较简单,元素个数较小时正确率有保证。
-
对于一些限制很奇怪的选物品题目可以尝试定义一些 \(01\) 变量转成规划问题,可以用无穷大的代价描述限制。
-
树上连通块当然是点分治钦定一个根最好做。点分治不止可以用于路径。
-
xorshift 32 参数: 13 17 5;xorshift 64 参数:13 7 17
-
区间没有相交只有包含排除,有时候暗示着单调栈。
-
每次随机一条边,如果加入不产生环就加入,用这样的方式随机产生的树的深度是 \(\Theta(n^{\frac13})\),且深度和高度的乘积之和是 \(\Theta(n^{\frac12})\)。
组合计数类
-
生成一个结构,每次在原先的基础上进行一些转化得到新的结构。当你发现依次递推非常困难的时候可以考虑从开头插入,考虑第一步对后面生成的结构的影响。这点不只适用于组合计数。
-
对于 \(\sum\limits_{k=1}^{m}{x_k} = n\) 的限制,在任何解中,本质不同的 \(x_k\) 的数目是 \(\mathrm O(\sqrt{n})\)。
-
一道题目涉及到异或和的时候想想Kummer定理,\(\binom{n}{k}\ mod\ 2 = 1\iff k\subseteq n\),这是Lucas定理的一个直接推论。
-
整除可以单位根反演。
-
神秘容斥:\(\sum\limits_{i=0}^{k}\binom{k}{i}(m-1)^i = m^k\)
数论类
-
处理取模:\(x \bmod p = x - p\lfloor\frac{x}{p}\rfloor\)。
-
处理 \(-1\) 的幂:\((-1) ^ a = 1 - 2(a \bmod 2) = 1 - 2(a - 2\lfloor \frac{a}{2}\rfloor)\),从而把 \(a\) 从指数上拿下来。
-
处理求和式:交换求和顺序,如果不能交换,考虑凭空求和:\(x = \sum\limits_{0}^{x-1}1\)。
-
处理有关上下取整的限制:\(x\le \lfloor y\rfloor\iff x\le y\),\(x \ge\lceil y\rceil\iff x\ge y\),反之亦然,可以这样把取整符号里的除法、根号等去掉然后再把取整加回去。
-
\([x = 1]\) 考虑凭空莫反转化成 \(\sum\limits_{d | x}\mu(d)\);\([\gcd(x, y) = d]\) 考虑枚举 \(d\),使得 \(Xd = x, Yd = y\),然后变成 \([\gcd(X, Y) = 1]\),用凭空莫反。
-
某个数与另一个数互质,可以考虑转化为模另一个数的所有质因子都不为0。当然也可以考虑莫反,这两者其实差不多。
结论类
-
考虑一个序列a,满足它的和为1,则它的所有循环同构串互不相同,且其中恰好有一个满足其所有部分和为正。(Raney引理,出自《混凝土数学》)
-
两维值域在 \([1, x]\cap \mathbb Z\) 的凸包大小是 \(\mathrm O(x^\frac23)\)。
-
总共有 \(n\) 个点的点集,凸包大小是 \(\Theta(\log n)\) 级别。事实上这是基于随机排列它的前缀最大值序列值个数期望是 \(\Theta(\log n)\)。
构造类
- 减少步数可以考虑 \(\text{DP}\) 求最小步数然后反过来构造。
多项式
- 求 \(a\) 模 \(2^k\) 的逆元,可以构造 \(F(x) = ax - 1\),求它在 \(\bmod x^k\) 意义下的根,其中 \(x\) 在 \(\mathbb Z_2\) 中。那么可以基于牛顿迭代做到 \(\Theta(\log k)\)。