cmd 博客乱学
指的是 多项式计数杂谈 , 炫酷反演魔术 ,min-max容斥小记 和 单位根反演小记 。
主要学的是前面两个,后面两个是前面的子项。
本文中的例题,除了单独的链接,其他没有写代码,自己乱推的,不保证完全正确。
多项式计数杂谈
若干数学知识
不讲了。
生成函数引入
不讲了。
一些数列的轻量级推导
首先是一些基本的生成函数封闭形式要认识一下。
\[\left< 1,1,1,1,...\right> = {1 \over 1-x} \\ \sum_{n=0} c^n x^{in} = {1 \over 1 - cx^i} \]还有几个用二项式瞎几把推的玩意。
斐波那契类问题
把一个生成函数用它自己的形式表示。注意边角项。
你会拆出来一个式子,以斐波那契为例。
\[F(x) = {x \over 1-x-x^2} \]你发现下面这个方程有两个根,根据牛逼定理,你大力猜这玩意可以裂项。
然后你就设
\[F(x) = {a \over 1-x_1}+{b \over 1-x_2} \]然后手动解个方程。
之后你可以用这两个东西直接搞出通项公式。
如果模意义下缺点东西的话,可以扩域。
特征方程
如果你觉得上面那个方法太烦,可以试试特征方程。
它用来解决
\[f_i = af_{i-1}+bf_{i-2} \]一类的问题。
有更高维的形式,但是比较麻烦,不搞了。
你假装
\(f\) 是一个公比为 \(q\) 的等比数列。
然后你可以得到
\[q^2 = aq+b \]你根据这个方程搞出 \(q_1, \ q_2\) 。
然后
\[f_i = \phi_1q_1^i + \phi_2q_2^i \]根据前两项的值解出 \(\phi_1\) 和 \(\phi _2\) 就行了。
证明:
你觉得我会?
构造幂级数的小技巧
平移和拉伸。
常系数齐次线性递推
其实就是手动把一些项补齐吧。
分式分解
这是什么鸡儿玩意。
卡特兰数
有通项公式
\[c_n = \sum_{i=0}^{n-1} c_ic_{n-i} \]把两边的生成函数写出来
\[[x^n]C = [x^{n-1}]C^2 + [n=0] \\ C = xC^2 + 1 \\ C = {1 \pm {\sqrt{1- 4x}}\over 2x} \]当 \(x = 0\) 的时候,\(C = 1\) 。如果上面取正号,会搞出非零数除以零,寄。
所以
\[C = {1 - \sqrt{1 - 4x} \over 2x} \]如何搞成更优美的形式,需要广义二项式定理。
生成函数组合计数初步+多项式工业练习
组合对象
指满足某一性质的可数的对象。
笛卡尔积
称 \(\{(a_1,a_2,...,a_n)|a_1 \in A_1,a_2 \in A_2,...,a_n \in A_n\}\) 为 \(A_1,A_2,...,A_n\) 的笛卡尔积。
其实就是每个集合选一个元素,组成的有序多元组的集合。
OGF
ordinary generating function.
两个 OGF 的乘法是经典的加法卷积。
\[\left<0,1,{1 \over 2},{1\over 3},...\right> = -\ln (1-x) \]OGF 的加法代表不相交集合的并。
OGF 的乘法代表笛卡尔积
例题:
EGF
exponential generating function.
设有数列 \(f_n\) ,其 EGF 为 \(F(x) = \sum_{i=0} f_i {x^i \over i!}\)。
就是在第 \(i\) 项除了个 \(i!\)。
\[\left< 1,1,1,1,... \right > = e^x \]两个 EGF 的乘法是二项加法卷积
\[(F*G)[k] = \sum_{i+j=k}{k \choose i}F[i]G[j] \]证明:
\[{(F*G)[k] \over k!} = \sum_{i+j = k} {F[i] \over i!}{G[j] \over j!} \]得证。
常用的 EGF:
\[\left< 1,c,c^2,c^3,...\right> = e^{cx}\\ \left<1,a,a^{\underline2},a^{\underline3},... \right> = (1+x)^a \](有标号对象的)笛卡尔积
将两个集合拼起来时,要用组合数分配标号。
例题:
LG5339 [TJOI2019] 唱、跳、rap和篮球
exp 的组合意义
\[e^{F(x)} = \sum_{i=0} {F(x)^i \over i!} \]这个的意义是多次卷积拼接自己。
例题:
PGF
probabilistic generating function.
对于离散随机变量 \(X\) ,约定 \(X \in N\)
其概率生成函数为
\[F(z) = \sum_{i=0}P(X=i)z^i \]显然有 \(F(1) = 1\)。
这玩意可以求导与期望产生联系
\[E(X) = \sum_{i=0}P(X=i)i = F^{'}(1) \]进一步扩展
\[E(X^{\underline k}) = F^{(k)}(1) \]例题不会。
关于上面三种 GF 的例题:
51nod1514
设 \(f_i\) 表示长度为 \(i\) 的合法排列个数。
容斥一下,不满足条件等价于在中间劈开,左边的数形成一个排列。
注意右边如果随便的话,就会算重。所以要保证左边加右边的前缀不是一个排列。
枚举左边的长度,得到
\[f_n = n! - \sum_{i=1}^{n-1} i!f_{n-i} \]移项
\[n! = \sum_{i=1}^{n} i! f_{n-i} \]设 \(g_i = i!\),大力整一发 OGF
\[G = 1 + GF \\ F = {G \over 1+G} \]然后没了。
LG5850 calc加强版
先把这玩意搞成无序的。
容易看出,答案是
\[[x^n] \prod _{i=1}^k (1+ix) \]按照套路,两边取 \(\ln\)。
上面这玩意就变成了
\[\sum_{j=1} (\sum_{i=1}^k i^n) {(-1)^{j+1}x^j \over j} \]然后你大力 EGF 搞出自然数幂和,就可以推倒了 /se 。
LG5860 Counting Trees
那必然是在 prufer 序列上搞事了。
答案相当于
\[[x^{-2}] \prod _{i=1}^n (1 + x^{v_i -2}) \]在通常情况下,右边这玩意不好直接 \(\ln\)。
对于 \(v_i \leq 2\) 的,那就瞎几把特判一下,搞出一个 \(F\)。
对于 \(v_i > 2\) 的,那就瞎几把 \(\ln\),搞出一个 \(G\)。
然后把 \(F\) 和 \(G\) 卷起来就行了。
LOJ6503 Magic
把一种颜色分成 \(j\) 段,就会产生 \(a_i - j\) 个相邻。这样会有 \({a_i - 1\choose j-1}\) 种方法。
所以一种颜色的 EGF 就是
\[A_i = \sum_{n=1}^{a_i} {a_i - 1 \choose n-1}{x^n \over n!} \]分治 NTT 把它们卷在一起。
那么硬点分成 \(k\) 段,其他随便的方案数就是 \(f_k = [x^k] \prod A_i\)。
恰好 \(k\) 个相邻要求分成 \(n-k\) 段。
设 \(g_i\) 表示恰好 \(i\) 段的方案数。
\[g_i = \sum_{j=i} {j \choose i} f_j \]二项式反演一下
\[f_i = \sum_{j=i}(-1)^{j-i}{j \choose i } g_j \]然后无了。
LG6516 Quark and Graph
不出意外的话,这题会是模拟赛题。
到时候应该会有一个专门的题解。
CF923E Perpetual Subtraction
不会,有时间再补。
upd:nmd 这题被扔进模拟赛里了,不得不做。
写出式子之后就是一路爆推。
没意思。
关于二项式
拆开组合数
很 trivial ,不讲了
经典二项式定理
很 trivial,不讲了
加法递推公式
\[{n \choose m} = {n-1 \choose m} + {n-1 \choose m-1} \]这玩意可以优化组合数递推式,可以裂项,用于凑出系数。
推论和技巧:
\[\sum_{i=0}^n {r+i \choose i} = {r+n+1 \choose n}\\ \sum_{i=0}^n {i \choose m} = {n+1 \choose m+1} \]上面两个都可以用从左到右 merge 的方法证明。
例题:
ARC061F
第一步转化没想到。但是后面的自己推出来了。
首先你要把它转化成一个序列对吧。
我这边的计数方法和其他人的有点不一样。
那么在这个数列里,\(A\) 会出现 \(n-1\) 次,\(B\) 出现不超过 \(m-1\) 次,\(C\) 出现不超过 \(k-1\) 次。且最后一次出现的一定是 \(A\)。
那么大力枚举序列的长度。再枚举 \(B\) 的出现次数。
\[\begin{aligned} Ans & = \sum_{len=n-1}^{n+m+k-1} 3^{n+m+k-len} \sum_{i} {len-1 \choose n-2} {len-n+1 \choose i} \\ & = \sum_{len-n-1}^{n+m+k-1} 3^{n+m+k-len} {len-1 \choose n-2} \sum_{i} {len-n+1 \choose i} \end{aligned} \]像上面所说,此时的 \(i\) 有限制。\(i \leq m-1\) 且 \(len-(n-1)-i \leq k-1\)。
所以右边实际上是
\[\sum_{i=len-(n-1)-k+1}^{m-1} {len-n+1 \choose i} \]那么我们记
\[f(l,r,a) = \sum_{i=l}^r {a \choose i} \]那么我们就想 \(f(l,r,a) \rightarrow f(l+1,r,a+1)\)。
考虑做差
\[\begin{aligned} & \ \ \ \ \ f(l+1,r,a+1) - f(l,r,a) \\ & = (\sum_{i=l+1}^r {{a+1 \choose i} - {a \choose i}}) - {a \choose l} \\ & = (\sum_{i=l+1}^r {a \choose i-1}) - {a \choose l} \\ & = (\sum_{i=l}^r{a \choose i}) - {a \choose l} - {a \choose r} \\ & = f(l,r,a) - {a \choose l} - {a \choose r} \end{aligned} \]然后你就可以愉快地递推了。
范德蒙德卷积
\[{n+m \choose k} = \sum_{i=0}^k {n \choose i} {m \choose k-i} \]组合意义挺显然的。
例题:
LG2791 幼儿园篮球题
感觉比较简单。写出最原始的式子之后就一路挺显然的。
有一个
\[{m \choose i}{i \choose j} = {m \choose j}{m-j \choose i-j} \]广义二项式系数,广义二项式定理
广义二项式系数
\[{\alpha \choose i} = {\alpha ^{\underline i} \over i!} \]其中 \(\alpha\) 是实数。
广义二项式定理
\[(x+y)^{\alpha} = \sum_{i=0}^{\infin} {\alpha \choose i} x^i y^{\alpha -i} \]一些衍生技巧
上指标反转
\[{r \choose k} = (-1)^k {k-r-1 \choose k} \]对于 \({2n \choose n}\) 型组合数:
先考虑把 \({n - {1 \over 2} \choose k}\) 写成一些组合数的乘积。
用加倍公式
\[x^{\underline k}(x-{1\over 2})^{\underline k} = {x^{\underline{2k}}\over 2^{2k}} \]令 \(x=k=n\) ,再同时除以 \(n!^2\),可以得到
\[{n -{1 \over 2} \choose n} = {{2n \choose n} \over 2^{2n}} \]用上指标反转,得到
\[{-{1 \over 2} \choose n} (-4)^n = {2n \choose n} \]这时可以搞出
\[\sum_{i=0} {2i \choose i} x^i \\ = \sum_{i=0}{-{1 \over 2} \choose i}(-4x)^i \]逆用广义二项式定理,搞出上面这玩意的封闭形式是
\[(1-4x)^{-{1 \over 2}} \]下降幂和上升幂的二项式定理
限制 \(n\) 是自然数
\[(x+y)^{\underline n} = \sum_{i=0}^n {n \choose i} x^{\underline i} y^{\underline {n-i}} \\ (x+y)^{\overline n} = \sum_{i=0}^n {n \choose i} x^{\overline i} y^{\overline {n-i}} \]跟普通幂的没啥区别。
差分与前缀和
一个数列的一阶前缀和相当于卷上了一个 \(1 \over 1-x\)。
\(n\) 阶前缀和就是卷了个 \(1 \over {(1-x)}^n\)。
差分就是卷 \((1-x)\),然后平移。
例题:
LG4458 链上二次求和
这个例题跟这个知识点有啥关系啊喂。
把这玩意搞出一个前缀和 \(s_i\)。
把前缀和 \(s_i\) 再搞个前缀和 \(ss_i\)
\[\begin{aligned} ans &= \sum_{i=l}^r \sum_{j=i}^n s_j - s_{j-i} \\ & = \sum_{i=l}^r ss_n - ss_{i-1} - ss_{n-i} \end{aligned} \]然后乱维护 \(s\),\(ss\) 就可以了。就变成一个 ds 问题了。
牛顿级数
不会。
生成函数与杨辉三角
把杨辉三角写成二元 GF
\[g_{n,m} = {n \choose m} \\ \begin{aligned} G(x,y) & = \sum_{i=0}\sum_{j=0}{i \choose j}x^i y^j \\ & = \sum_{i=0}x^i (y+1)^i \\ & = {1 \over 1-x-xy} \end{aligned} \]在组合数特定方向求和的时候,可以用这玩意搞出 GF,然后直接从封闭形式搞出点好玩的东西。
其他特殊数
斯特林数
基本的东西不讲。
例题
CF932E Team Work
什么垃圾题。
LG4609 [FJOI2016] 建筑师
什么第一类 Stirling 数神仙题。
CF960G Bandit Blues
这 tm 不是跟上一题一样吗。
CF961G Partitions
第一眼:不会
第二眼:瞪出来一个式子,然后 NTT 同一列斯特林数就可以了哈哈哈。
核心是化简这样一个东西
\[\begin{aligned} & \ \ \ \ \ \sum_{i=1}^n i{n-1 \choose i-1}{n-i \brace k-1} \end{aligned} \]然后你直接拆斯特林数,直接推就行了。
CF715E Complete the Permutations
不会。mark 一下,以后补。
伯努利数
不会。不想学。
欧拉数
不会。不想学。
分拆数
不会。不想学。
(你怎么啥也不想学 /fn)。
后面的学个锤子。我爬了。