trick 总结
😍💥🌟⭐✨👍✌
常见trick积累:
并不全,还有很多没有记录。
⭐正难则反
字面意思,正着不好做,就感受一下,可能反着做会更简单。
⭐拆贡献
很好的 trick,要找到与贡献相关的一个量,按这个量将需要求的贡献划分,可能会更好求。
过大的数除了高精度还可以取 \(\log\) 然后相加再还原
哦,\(\log\) 的基本运算法则。
并非贪心、CF677E Vanya and Balloons。
枚举子集用 T=T-1&S。
嗯,基本常识。
⭐转化问题,构造双射
转化用,一般是计数题。
P14363 谐音替换、CF2146F Bubble Sort。
避免重复计算
启发式优化。
💥最小生成树的两个trick
😍超级拆卸
比如 \(\min,\max\),还有绝对值等(考虑直接枚举或通过排序使得序列出现单调性,确定最大最小值,绝对值就是大的减小的)。
\(\min(a,b)\) 有很多种拆法,有 min-max 容斥,有 \(\dfrac{a+b-|a-b|}{2}\)。
AI 还是太牛了,这一个子标题内,分割线以下部分由 arena 生成。太多了,今天看不完,10.30 复习的时候再看看,所以现在是直接粘贴的 AI 原文。
这个核心思想太通透了,醍醐灌顶。注:耦合是指相互影响,相互依赖。也就是令人头疼,最难处理的部分。
核心思想:遇到没法直接用数据结构维护、没法直接放进 DP 状态、或者包含 \(i,j\) 强耦合的式子时,通过代数变形、分类讨论或组合意义,将其拆成若干个独立可维护的部分。
1. \(\min, \max\) 与绝对值 \(|x|\) 的拆卸
这类函数的特点是分段线性,核心思路是“消灭分界点”或“互相转化”:
- 偏序拆解法(分类讨论):
- 通过排序、双指针、CDQ 分治、树状数组,强行钦定大小关系。一旦确定 \(a_i\geq b_j\),则 \(|a_i-b_j|=a_i-b_j\),\(\max(a_i,b_j)=a_i\),耦合瞬间解开(常配合维护前缀和/后缀和)。
- 代数互化:
- \(\min(a,b)=\dfrac{a+b-|a-b|}{2}\),\(\max(a,b)=\dfrac{a+b+|a-b|}{2}\)。
- \(\min(a,b)+\max(a,b)=a+b\)。
- 符号枚举拆绝对值(高维曼哈顿距离):
- 利用 \(|x|=\max(x,-x)\)。对于 \(k\) 维空间的点,求 \(\max\sum\limits_{d=1}^k |x_{i,d} - x_{j,d}|\),可以暴力枚举每一维拆开后的正负号(共 \(2^k\) 种状态),把绝对值直接变成加减号,分离 \(i\) 和 \(j\)(例:CF1093G)。
- 曼哈顿 \(\leftrightarrow\) 切比雪夫:
- 曼哈顿转切比雪夫(把 \(|x_1-x_2|+|y_1-y_2|\) 的求和拆成 \(\max\)):\((x, y) \to (x+y, x-y)\),距离变为 \(\max(|x'_1-x'_2|, |y'_1-y'_2|)\)。
- 切比雪夫转曼哈顿(把 \(\max\) 拆成求和以便分别算 \(x, y\) 贡献):\((x, y) \to \left(\dfrac{x+y}{2}, \dfrac{x-y}{2}\right)\)。
- 01 拆解法(分层 / 离散积分思想,神仙 trick):
- 对于非负整数,\(x = \sum_{k \ge 1} [x \ge k]\)。
- 在此视角下,\(\min(a,b) = \sum_{k \ge 1} [a \ge k][b \ge k]\),\(\max(a,b) = \sum_{k \ge 1} [a \ge k \lor b \ge k]\)。
- 用途:把极值问题变成 \(01\) 序列的与/或问题,在期望 DP、树形 DP、AGC 计数题中极其常用(枚举阈值 \(k\),大于等于 \(k\) 看作 \(1\),小于 \(k\) 看作 \(0\))。
- Min-Max 容斥(极值互拆):
- \(\max(S) = \sum_{T \subseteq S, T \neq \emptyset} (-1)^{|T|-1} \min(T)\)(反之亦然)。
- 扩展 Kth Min-Max:\(\operatorname{kthmax}(S) = \sum_{T \subseteq S, |T| \ge k} (-1)^{|T|-k} \binom{|T|-1}{k-1} \min(T)\)。
- 用途:具有线性性,套上期望 \(E[\max(S)]\) 依然成立(经典应用:按位或/收集全集的最晚时间转最早时间)。
- 区间极值拆贡献(单调栈 / 笛卡尔树):
- 求 \(\sum_{l \le r} \max_{i=l}^r a_i\):不枚举区间,而是用单调栈求出每个 \(a_i\) 作为最大值能统治的左右边界 \([L_i, R_i]\),贡献拆为 \(a_i \times (i - L_i + 1)(R_i - i + 1)\)。
2. 取模 \(\bmod\) 与上下取整 \(\lfloor \cdot \rfloor, \lceil \cdot \rceil\) 的拆卸
- 取模拆成整除(最常用):
- \(a \bmod b = a - b \left\lfloor \dfrac{a}{b} \right\rfloor\)。
- 用途:看到 \(\sum (a_i \bmod b_j)\) 必拆!拆完后变成维护 \(\left\lfloor \dfrac{a_i}{b_j} \right\rfloor\),若值域为 \(V\),可通过整除分块或调和级数枚举倍数(枚举商 \(k\),则 \(a_i \in [k b_j, (k+1)b_j - 1]\),转为值域区间查询)解决。
- 和的下取整拆成进位:
- \(\left\lfloor \dfrac{a+b}{p} \right\rfloor = \left\lfloor \dfrac{a}{p} \right\rfloor + \left\lfloor \dfrac{b}{p} \right\rfloor + [(a \bmod p) + (b \bmod p) \ge p]\)。
- 后面那个艾弗森括号可以用权值树状数组/排序双指针统计偏序个数。
- 上取整转下取整:
- \(\left\lceil \dfrac{a}{b} \right\rceil = \left\lfloor \dfrac{a+b-1}{b} \right\rfloor\)(正整数域)。
3. 位运算的拆卸(\(\operatorname{xor}, \operatorname{and}, \operatorname{or}, \operatorname{popcount}\))
- 按位拆(位独立性):
- 只要位运算和四则运算(\(+,-,\times\))混在一起,首先考虑 \(x = \sum_{k} 2^k b_{x,k}\)。
- 异或的高次幂拆卸(拆位对):
- 若求 \(\sum (a_i \oplus a_j)^2\),一位一位拆是不行的,要把平方展开:\[\left(\sum_{p} 2^p x_p\right)^2 = \sum_{p} \sum_{q} 2^{p+q} x_p x_q \]即同时枚举两个二进制位 \((p, q)\),统计第 \(p\) 位和第 \(q\) 位同时异或为 \(1\) 的对数(三次方则枚举三位,以此类推)。
- 若求 \(\sum (a_i \oplus a_j)^2\),一位一位拆是不行的,要把平方展开:
- 加法与位运算互拆:
- \(a + b = (a \oplus b) + 2(a \operatorname{and} b)\)
- \(a + b = (a \operatorname{or} b) + (a \operatorname{and} b)\)
- \(a \oplus b = (a \operatorname{or} b) - (a \operatorname{and} b)\)
- \(\operatorname{popcount}(a \oplus b) = \operatorname{popcount}(a) + \operatorname{popcount}(b) - 2\operatorname{popcount}(a \operatorname{and} b)\)(常用于判定奇偶性)。
4. 高次幂 \(x^k\) 与耦合多项式的拆卸
- 分离变量的代数展开:
- \((a_i - b_j)^2 = a_i^2 - 2a_i b_j + b_j^2\)(斜率优化 / 线段树维护区间方差的基石)。
- \(x^k\) 的三种黄金拆法(当 \(x\) 是动态变化的量,如子集大小、树上距离,而 \(k\) 较小时):
- 二项式定理拆(适合增量维护):\((a+b)^k = \sum_{i=0}^k \binom{k}{i} a^i b^{k-i}\)。
- 第二类斯特林数拆成组合数(适合树形 DP / 组合计数):\[n^k = \sum_{i=0}^k \begin{Bmatrix} k \\ i \end{Bmatrix} i! \binom{n}{i} \]因为 \(\binom{n}{i} = \binom{n-1}{i} + \binom{n-1}{i-1}\),在树上每走一步(\(n \to n+1\))只需 \(O(k)\) 转移!
- 组合意义拆(适合期望/计数 DP):
\(x^k\) 等价于“在大小为 \(x\) 的集合中,有顺序、可重复地选出 \(k\) 个元素的方案数”。直接把“已经选了几个元素”压进 DP 状态里。
5. 树、图与几何结构的拆卸
- 连通块个数拆卸(点减边 trick):
- 树/森林:\(\text{连通块数} = |V| - |E|\)。求满足条件的连通块个数(或权值和),如果保证无环,直接拆成点的贡献 \(-\) 边的贡献!
- 平面图(网格图连通块):欧拉公式 \(|V| - |E| + |F| = C + 1\),把网格连通块数拆成“顶点数 \(-\) 边数 \(+\) 2×2 四格环数”。
- 树上距离与 LCA 拆卸:
- \(\operatorname{dist}(u, v) = \operatorname{dep}_u + \operatorname{dep}_v - 2\operatorname{dep}_{\operatorname{LCA}(u,v)}\)。
- LCA 深度拆成路径点权([LNOI2014] LCA 经典 trick):
求 \(\sum_{v \in S} \operatorname{dep}_{\operatorname{LCA}(u, v)}\):把每个 \(v \in S\) 到根节点的路径上所有点权 \(+1\),那么查询 \(u\) 到根节点的路径权值和,就恰好等于 \(\sum \operatorname{dep}_{\operatorname{LCA}(u, v)}\)!
- 区间交与矩形拆差分:
- 两个区间 \([l_1, r_1], [l_2, r_2]\) 的交集长度:\(\max(0, \min(r_1, r_2) - \max(l_1, l_2) + 1)\)。
- 二维矩形求和 \([x_1, x_2] \times [y_1, y_2]\) 拆成 \(4\) 个前缀矩形(四分差),把区间对区间的询问 \([l_1, r_1]\) 与 \([l_2, r_2]\) 拆成 4 个前缀对前缀的询问。
6. 数论函数(\(\gcd, \operatorname{lcm}\))的拆卸
- 更相减损拆差分(线段树维护区间 \(\gcd\)):
- \(\gcd(a_l, a_{l+1}, \dots, a_r) = \gcd(a_l, |a_{l+1}-a_l|, \dots, |a_r - a_{r-1}|)\)。将区间加 + 区间 \(\gcd\) 拆解为单点加差分数组。
- 唯一分解拆指数:
- 把每个质因子 \(p\) 拆开独立看,乘法变加法,\(\gcd\) 变 \(\min\),\(\operatorname{lcm}\) 变 \(\max\)(从而可以继续套用 Min-Max 容斥:\(\operatorname{lcm}(S) = \prod_{T \subseteq S, T \neq \emptyset} \gcd(T)^{(-1)^{|T|-1}}\))。
- 欧拉/莫比乌斯反演拆因子:
- \(\gcd(i, j) = \sum_{d \mid i, d \mid j} \varphi(d)\)
- \([\gcd(i, j) = 1] = \sum_{d \mid i, d \mid j} \mu(d)\)
- 把 \(i, j\) 耦合的 \(\gcd\) 拆成枚举公共因子 \(d\),让 \(i\) 和 \(j\) 在各自的倍数集合中独立统计。
⭐放松限制
有时放松限制后答案不变但更好统计,
树上包含的关键点最小生成树
假设关键点按照 DFS 序排序后是 \(\{a_1,a_2,\ldots ,a_k\}\),那么包含所有关键点的极小连通子树的边权和的两倍等于 \(\operatorname{dis}(a_1,a_2)+\operatorname{dis}(a_2,a_3)+\dots+\operatorname{dis}(a_{k-1},a_k)+\operatorname{dis}(a_k,a_1)\)。注意是边权和,点权和不成立。
随机序列的 LIS 长度期望是 \(\mathcal O(\sqrt n)\) 的。
👍分治答案
当答案具有单调性,并且答案的种类数量很小可以接受的时候,可以以 \(\mathcal O(n\cdot\text{答案种类})\) 的时间复杂度求解答案。
👍binary gcd
常数很小的 gcd 求法,本质辗转相减。这个做法很神的一点在于,先把所有公共质因子 \(2\) 求出来,然后相减后某个数的二进制末尾零就是没用的,可以用 __builtin_ctz() 加速删除。然后每次两个奇数相减一定会变成一奇一偶,所以每次至少消除一个二进制位,因此时间复杂度是 \(\mathcal O(\log V)\)。
#define ctz(x) __builtin_ctz(x)
int GGG(int x,int y){
if(!x||!y)return x|y;
int sum1=ctz(x),sum2=ctz(y);
x>>=sum1;y>>=sum2;
sum1=min(sum1,sum2);
while(x!=y){
if(x<y)swap(x,y);
x-=y;
x>>=ctz(x);
}
return x<<sum1;
}
⭐斐波那契与 \(gcd\) 的一些定理:
\( f_i = \begin{cases} 1&i\leq2\\ f_{i-1}+f_{i-2}&i\gt2 \end{cases} \)
- \(gcd(f_n,f_{n-1})=1\)。
- \(f_{n+m}=f_{n-1}f_m+f_nf_{m+1}\)。
- 如果 \(n|m\),那么 \(f_n|f_m\)。
- \(gcd(f_n,f_m)=f_{gcd(n,m)}\)
AI 的证明与补充
1. 相邻两项互质:\(\gcd(f_n, f_{n-1}) = 1\)
- 证明(更相减损术):\[\gcd(f_n, f_{n-1}) = \gcd(f_{n-1} + f_{n-2}, f_{n-1}) = \gcd(f_{n-1}, f_{n-2}) \]不断递推下去,最终有:\[\gcd(f_n, f_{n-1}) = \dots = \gcd(f_2, f_1) = \gcd(1, 1) = 1 \]
- 注(拉梅定理 Lamé's Theorem):\((f_n, f_{n-1})\) 是欧几里得算法(辗转相除法)达到最大步数的极限情况(每一步的商都是 \(1\)),这也顺便证明了求 \(\gcd\) 的时间复杂度上界是 \(O(\log_{\phi} V)\)。遇到“构造两个数使得 \(\gcd\) 步数最多/指定步数”的题,直接往斐波那契上靠。
2. 跨步递推公式(加法定理):\(f_{n+m} = f_{n-1}f_m + f_n f_{m+1}\)
- 证明法一(数学归纳法):
固定 \(n\),对 \(m\) 进行归纳:- 当 \(m=0\) 时,右边 \(= f_{n-1}f_0 + f_n f_1 = f_n\),左边 \(= f_n\),成立。
- 当 \(m=1\) 时,右边 \(= f_{n-1}f_1 + f_n f_2 = f_{n-1} + f_n = f_{n+1}\),左边 \(= f_{n+1}\),成立。
- 若对 \(m-1\) 和 \(m\) 成立,将两式相加:\[f_{n+m+1} = f_{n+m} + f_{n+m-1} = f_{n-1}(f_m + f_{m-1}) + f_n(f_{m+1} + f_m) = f_{n-1}f_{m+1} + f_n f_{m+2} \]对 \(m+1\) 也成立,证毕。
- 证明法二(矩阵快速幂视角,最好记!):
众所周知转移矩阵 \(A = \begin{pmatrix} 1 & 1 \\ 1 & 0 \end{pmatrix}\) 满足 \(A^n = \begin{pmatrix} f_{n+1} & f_n \\ f_n & f_{n-1} \end{pmatrix}\)。
利用矩阵乘法结合律 \(A^{n+m} = A^n \cdot A^m\):\[\begin{pmatrix} f_{n+m+1} & \color{red}{f_{n+m}} \\ f_{n+m} & f_{n+m-1} \end{pmatrix} = \begin{pmatrix} f_{n+1} & f_n \\ \color{blue}{f_n} & \color{blue}{f_{n-1}} \end{pmatrix} \begin{pmatrix} f_{m+1} & \color{blue}{f_m} \\ f_m & \color{blue}{f_{m-1}} \end{pmatrix} \]对比右上角(或左下角)的元素,直接一眼秒出 \(f_{n+m} = f_n f_{m+1} + f_{n-1}f_m\)! - 常用推论(倍增公式,用于 \(O(\log n)\) 快速求单点斐波那契):
令 \(m = n\),结合 \(f_{n+1} = f_n + f_{n-1}\) 可得:- \(f_{2n} = f_n(f_{n+1} + f_{n-1}) = f_n(2f_{n-1} + f_n)\)
- \(f_{2n+1} = f_n^2 + f_{n+1}^2\)(顺便说明了奇数项的斐波那契数一定是两个平方数之和)
3. 整除传递性:若 \(n \mid m\),则 \(f_n \mid f_m\)
- 证明(利用定理 2 对倍数 \(k\) 归纳):
设 \(m = kn \ (k \in \mathbb{N})\)。- \(k=1\) 时,\(f_n \mid f_n\) 显然成立。
- 假设 \(k\) 时成立,即 \(f_n \mid f_{kn}\)。当 \(m = (k+1)n\) 时,由定理 2 展开:\[f_{(k+1)n} = f_{kn + n} = f_{kn-1}\color{red}{f_n} + \color{red}{f_{kn}}f_{n+1} \]右边第一项含因子 \(f_n\),第二项由归纳假设 \(f_n \mid f_{kn}\) 也含因子 \(f_n\),故 \(f_n \mid f_{(k+1)n}\)!
4. 最大公因数可移入下标:\(\gcd(f_n, f_m) = f_{\gcd(n, m)}\)
- 证明(结合定理 1、2、3 模拟辗转相除法):
不妨设 \(m > n\),做带余除法设 \(m = qn + r \ (0 \le r < n)\)。\[\gcd(f_m, f_n) = \gcd(f_{qn+r}, f_n) \]利用定理 2 把 \(f_{qn+r}\) 拆开:\[\gcd(f_{qn+r}, f_n) = \gcd(f_{qn-1}f_r + f_{qn}f_{r+1}, f_n) \]由定理 3 知 \(f_n \mid f_{qn}\),所以 \(f_{qn}f_{r+1}\) 是 \(f_n\) 的倍数,在 \(\gcd\) 中可以直接消去!于是:\[\gcd(f_m, f_n) = \gcd(f_{qn-1}f_r, f_n) \]又由定理 1 知 \(\gcd(f_{qn}, f_{qn-1}) = 1\),而 \(f_n\) 是 \(f_{qn}\) 的因子,所以 \(f_n\) 与 \(f_{qn-1}\) 必然也互质,即 \(\gcd(f_{qn-1}, f_n) = 1\)!
既然 \(f_{qn-1}\) 与 \(f_n\) 互质,就可以直接把它从 \(\gcd\) 里约掉:\[\gcd(f_m, f_n) = \gcd(f_r, f_n) = \gcd(f_{m \bmod n}, f_n) \]不断在下标上进行辗转相除,最终得到 \(\gcd(f_n, f_m) = f_{\gcd(n, m)}\)!
💡 建议补充进笔记的扩展定理与 OI Trick(5 ~ 9)
为了让你这个模块能够覆盖所有斐波那契数论题,强烈建议补充下面这几条:
5. 卡西尼恒等式(Cassini's Identity)
- 证明:依然看转移矩阵 \(A^n = \begin{pmatrix} f_{n+1} & f_n \\ f_n & f_{n-1} \end{pmatrix}\),两边同时取行列式 \(\det(A^n) = (\det A)^n\),左边是 \(f_{n+1}f_{n-1} - f_n^2\),右边是 \((-1)^n\),一行证完!
- OI 用途:
- 它直接给出了定理 1(\(\gcd(f_{n+1}, f_n)=1\))的裴蜀定理构造解,说明 \(f_n\) 在模 \(f_{n+1}\) 意义下的逆元就是 \((-1)^{n+1} f_{n-1}\)!
- 更一般地,有多尔金恒等式(Catalan's Identity):\(f_n^2 - f_{n-r}f_{n+r} = (-1)^{n-r} f_r^2\)。
6. 斐波那契与 \(\operatorname{lcm}\) 的拆卸(配合“超级拆卸”模块!)
- 易错警告:\(\gcd(f_n, f_m) = f_{\gcd(n,m)}\) 成立,但 \(\operatorname{lcm}(f_n, f_m) \neq f_{\operatorname{lcm}(n,m)}\)!
- Trick 1(Min-Max 容斥拆 \(\operatorname{lcm}\)):
当题目要求 \(\operatorname{lcm}(f_{a_1}, f_{a_2}, \dots, f_{a_k}) \bmod P\) 时,利用唯一分解指数上的 Min-Max 容斥,把 \(\operatorname{lcm}\) 拆成 \(\gcd\) 的乘积,从而把 \(\gcd\) 塞进下标里:\[\operatorname{lcm}_{i \in S}(f_{a_i}) = \prod_{T \subseteq S, T \neq \emptyset} \left(\gcd_{i \in T} f_{a_i}\right)^{(-1)^{|T|-1}} = \prod_{T \subseteq S, T \neq \emptyset} f_{\gcd(T)}^{(-1)^{|T|-1}} \] - Trick 2(莫比乌斯反演拆本原因子,处理子集规模 \(n \le 10^6\) 的情况):
如果集合太大不能 \(2^n\) 枚举子集,设辅助数组 \(g\) 满足 \(f_n = \prod_{d \mid n} g_d\)(由乘积莫比乌斯反演可得 \(g_n = \prod_{d \mid n} f_d^{\mu(n/d)}\),可在 \(O(N \log N)\) 内预处理)。
此时 \(\gcd(f_a, f_b) = f_{\gcd(a,b)}\) 等价于每个 \(g_d\) 之间是两两互质的(类似分圆多项式)!于是:\[\operatorname{lcm}(f_{a_1}, f_{a_2}, \dots, f_{a_k}) = \prod_{d \in \bigcup \{a_i \text{ 的约数}\}} g_d \]求一堆斐波那契数的 \(\operatorname{lcm}\),直接变成求它们下标的所有约数的并集对应的 \(g_d\) 之积!(经典例题:CF360E / 洛谷 P3702 衍生题)。
7. 同构结构:形如 \(a^n - b^n\) 的 \(\gcd\) 定理
定理 4 并不是斐波那契独有的,它本质上属于卢卡斯序列的性质。在 OI 中最常考的孪生兄弟是:
更一般地,若 \(\gcd(a, b) = 1\),则:
- 证明思路与定理 4 完全一模一样:利用 \(a^m - 1 = a^r(a^{qn} - 1) + (a^r - 1)\) 做辗转相除即可。
8. 广义斐波那契与皮萨诺周期(Pisano Period)
- 广义拆系数:若数列满足 \(g_0 = a, g_1 = b, g_n = g_{n-1} + g_{n-2}\),则可以拆成标准斐波那契的线性组合:\[g_n = a f_{n-1} + b f_n \]这说明任何线段树维护“区间加斐波那契数列”的题(如 CF446C),只需要在每个节点维护区间前两项 \((a, b)\),就能用上面的公式 \(O(1)\) 算出任意第 \(n\) 项和区间和!
- 模意义下的周期性:\(f_n \bmod m\) 是纯周期数列(从 \(f_0\) 就开始循环),最小正周期记为 \(\pi(m)\),满足定理 \(\pi(m) \le 6m\)。
- 若 \(p\) 为质数且 \(5\) 是模 \(p\) 的二次剩余(即 \(p \equiv \pm 1 \pmod 5\)),则 \(\pi(p) \mid (p - 1)\);
- 若 \(5\) 是模 \(p\) 的二次非剩余(即 \(p \equiv \pm 2 \pmod 5\)),则 \(\pi(p) \mid (2p + 2)\)。
9. 推式子必背的三个求和恒等式
- 前缀和:\(\sum_{i=1}^n f_i = f_{n+2} - 1\)(由 \(f_i = f_{i+2} - f_{i+1}\) 裂项相消即得)。
- 奇偶前缀和:
- \(\sum_{i=1}^n f_{2i-1} = f_{2n}\)
- \(\sum_{i=1}^n f_{2i} = f_{2n+1} - 1\)
- 平方前缀和:\(\sum_{i=1}^n f_i^2 = f_n f_{n+1}\)(几何意义:\(n\) 个边长为 \(f_i\) 的正方形刚好能无缝拼成一个长为 \(f_{n+1}\)、宽为 \(f_n\) 的黄金大长方形)。
推式子的二级结论
-
吸收公式:\(m\cdot\dbinom{n}{m}=n\cdot\dbinom{n-1}{m-1}\)。
-
忘记了名字的公式:\(\dbinom{a}{b}\cdot\dbinom{b}{c}=\dbinom{a}{c}\cdot\dbinom{a-c}{b-c}\)。
-
范德蒙德卷积,这个不太清楚使用情况与枚举边界,但大致是:\(\displaystyle\sum\limits_{i=0}^n\dbinom{a}{i}\cdot\dbinom{b}{n-i}=\dbinom{a+b}{n}\)。
-
二项式定理:\(\displaystyle\sum\limits_{i=0}^na^ib^{n-i}\dbinom{n}{i}=(a+b)^n\),题目一般会少一项,或者 \(a,b\) 其中一个是 \(1\)/\(-1\)。
-
未命名公式:\(\displaystyle\sum\limits_{i=l}^{r}{\dbinom{i}{x}}=\dbinom{r+1}{x+1}-\dbinom{l}{x+1}\)
- \(\displaystyle\sum\limits_{i=0}^{x}{\dbinom{i}{y}}=\dbinom{x+1}{y+1}\)
未命名
下面我把你写的 5 条补齐了正式名称、使用场景、枚举边界陷阱,并补充了另外 5 条在 OI 推式子中出镜率极高的同级别二级结论:
前置约定(极其重要):在组合数推式子时,默认规定当 \(k < 0\) 或 \(k > n\)(\(n \ge 0\))时,\(\dbinom{n}{k} = 0\)。这能帮我们省去绝大部分恶心人的求和上下界讨论!
-
吸收恒等式(Absorption Identity):
- \(\displaystyle m\binom{n}{m} = n\binom{n-1}{m-1}\)
- 使用场景:当求和式里出现 \(\displaystyle\sum_m m\binom{n}{m}\) 时,外面的枚举变量 \(m\) 非常讨厌,用吸收公式可以把变量 \(m\) “吸”进组合数内部,而外面的系数变成与枚举变量无关的常量 \(n\),直接提到 \(\sum\) 外面!
- 高阶版(下降幂吸收):\(\displaystyle m^{\underline{k}}\binom{n}{m} = n^{\underline{k}}\binom{n-k}{m-k}\)。若遇到 \(m^2\dbinom{n}{m}\),先拆成 \(\left[m(m-1) + m\right]\dbinom{n}{m}\) 即可吸收。
-
三项式版恒等式 / 子集之子集公式(Trinomial Revision) (你忘记名字的那个):
- \(\displaystyle \binom{a}{b}\binom{b}{c} = \binom{a}{c}\binom{a-c}{b-c}\)
- 组合意义:从 \(a\) 个物品里选 \(b\) 个,再从这 \(b\) 个里选 \(c\) 个 \(\Longleftrightarrow\) 先直接从 \(a\) 个里选出最终的那 \(c\) 个,再从剩下的 \(a-c\) 个里选出凑数的 \(b-c\) 个。
- 使用场景(分离枚举变量的神器):当式子形如 \(\displaystyle\sum_{b} \binom{a}{b}\binom{b}{c} \dots\)(枚举变量 \(b\) 同时卡在第一个的下指标和第二个的上指标)时,用该公式转化为右边后,\(\dbinom{a}{c}\) 不再含变量 \(b\),可以直接提出求和号!剩下的 \(\dbinom{a-c}{b-c}\) 只有下指标含 \(b\),瞬间变成基础求和(二项式反演的证明就全靠这一步)。
-
范德蒙德卷积(Vandermonde's Convolution):
- 标准形式:\(\displaystyle \sum_{i=0}^n \binom{a}{i}\binom{b}{n-i} = \binom{a+b}{n}\)
- 关于枚举边界:由于组合数越界自动为 \(0\),只要求和范围完整覆盖了所有非零项(比如 \(i\) 从 \(0\) 到 \(\min(a, n)\),或者干脆从 \(0\) 到 \(a\)、从 \(-\infty\) 到 \(+\infty\)),结果通通不变!唯一需要注意的是题目故意少枚举了 \(i=0\) 或 \(i=n\) 的情况,单独减去即可。
- 使用情况与四大高频变形(做题识别特征):
- 标准识别特征:两个组合数相乘求和,上指标是定值,下指标之和是定值(\(i + (n-i) = n\))。
- 最阴险的伪装(下指标之差是定值):
题目常写成 \(\displaystyle \sum_{i} \binom{a}{i}\binom{b}{k+i}\)(两个下指标都有 \(+i\),加不起来!)。
破局:利用对称性 \(\dbinom{b}{k+i} = \dbinom{b}{b-k-i}\) 翻转其中一个下指标,立刻变成下指标之和为定值 \(b-k\):\[\displaystyle \sum_{i} \binom{a}{i}\binom{b}{k+i} = \sum_{i} \binom{a}{i}\binom{b}{b-k-i} = \binom{a+b}{b-k} = \binom{a+b}{a+k} \] - 平方和特例:\(\displaystyle \sum_{i=0}^n \binom{n}{i}^2 = \sum_{i=0}^n \binom{n}{i}\binom{n}{n-i} = \binom{2n}{n}\)。
- 纵向版(下指标不变,上指标之和为定值 / 隔板卷积):\[\displaystyle \sum_{i=0}^n \binom{i}{a}\binom{n-i}{b} = \binom{n+1}{a+b+1} \](组合意义:在 \(n+1\) 个球中选 \(a+b+1\) 个,枚举第 \(a+1\) 个被选中的球排在第 \(i+1\) 个位置,左边 \(i\) 个选 \(a\) 个,右边 \(n-i\) 个选 \(b\) 个)。
-
二项式定理(Binomial Theorem)与单位消元:
- \(\displaystyle \sum_{i=0}^n \binom{n}{i} a^i b^{n-i} = (a+b)^n\)(注意题目常从 \(i=1\) 开始枚举,记得减去 \(i=0\) 时的 \(b^n\))。
- 三个必背特例:
- \(a=1, b=1\):\(\displaystyle \sum_{i=0}^n \binom{n}{i} = 2^n\)
- \(a=-1, b=1\)(容斥消元引擎):\(\displaystyle \sum_{i=0}^n (-1)^i \binom{n}{i} = [n = 0]\)(在组合推式子中,它的地位等同于莫比乌斯反演里的 \(\sum_{d\mid n}\mu(d) = [n=1]\),看到 \([n=0]\) 就可以用它硬拆!)。
- 奇偶项分别求和:\(\displaystyle \sum_{i \text{ 为偶}} \binom{n}{i} = \sum_{i \text{ 为奇}} \binom{n}{i} = 2^{n-1} \ (n \ge 1)\)(若推广到求 \(i \bmod k = r\) 的项之和,则使用单位根反演)。
-
上指标求和 / 朱世杰恒等式(Hockey-Stick Identity) (你写的未命名公式):
- 前缀和形式:\(\displaystyle \sum_{i=0}^{x} \binom{i}{y} = \sum_{i=y}^{x} \binom{i}{y} = \binom{x+1}{y+1}\)(因为 \(i<y\) 时值为 \(0\),所以从 \(0\) 还是从 \(y\) 开始枚举完全等价)。
- 区间和形式:\(\displaystyle \sum_{i=l}^{r} \binom{i}{x} = \binom{r+1}{x+1} - \binom{l}{x+1}\)。
- 本质:帕斯卡公式 \(\dbinom{i}{y} = \dbinom{i+1}{y+1} - \dbinom{i}{y+1}\) 的裂项相消。口诀:“上指标求和,上下各加一”。
- 孪生变形(平行求和法,上下指标同时加 \(i\)):\[\displaystyle \sum_{i=0}^n \binom{r+i}{i} = \sum_{i=0}^n \binom{r+i}{r} = \binom{r+n+1}{r+1} = \binom{r+n+1}{n} \]
➕ 建议追加的 3 条高频二级结论
-
上指标反转(负上指标提取符号):
- \(\displaystyle \binom{-n}{k} = (-1)^k \binom{n+k-1}{k}\)
- 用途:生成函数推式子必背!直接导出负二项式展开 \(\displaystyle \frac{1}{(1-x)^n} = \sum_{k=0}^{\infty} \binom{n+k-1}{k} x^k\)。
-
Lucas 定理与组合数奇偶性(二进制拆解 Trick):
- Lucas 定理:\(\displaystyle \binom{n}{m} \equiv \binom{\lfloor n/p \rfloor}{\lfloor m/p \rfloor} \binom{n \bmod p}{m \bmod p} \pmod p\)。
- 奇偶性二级结论(\(p=2\) 时极常考):\[\dbinom{n}{m} \bmod 2 = 1 \iff (n \operatorname{and} m) = m \iff m \text{ 是 } n \text{ 的二进制子集} \]推式子时一旦看到 \(\dbinom{n}{m} \bmod 2\),立刻把组合数扔掉换成 \([ (n \operatorname{and} m) = m ]\),直接变成高维前缀和(SOS DP / FWT)问题!
-
二项式反演(Binomial Inversion,由子集公式 + 容斥引擎直接导出):
- “至多” \(\leftrightarrow\) “恰好”:\(\displaystyle f(n) = \sum_{i=0}^n \binom{n}{i} g(i) \Longleftrightarrow g(n) = \sum_{i=0}^n (-1)^{n-i} \binom{n}{i} f(i)\)
- “钦定至少” \(\leftrightarrow\) “恰好”(OI 最常用):\[\displaystyle f(k) = \sum_{i=k}^n \binom{i}{k} g(i) \Longleftrightarrow g(k) = \sum_{i=k}^n (-1)^{i-k} \binom{i}{k} f(i) \]

浙公网安备 33010602011771号