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)。

后面的学个锤子。我爬了。

相关