生成函数

发布时间 2023-08-06 20:22:07作者: SError

P4451 [国家集训队]整数的lqp拆分

\[\sum_{\sum_{i=1}^{m}a_i=n,a_i>0}\prod_{i=1}^{m}f_{a_i} \]

\(f\) 是斐波那契数列,\(f_0=0\)\(f_1=1\).

答案对 \(1e9+7\) 取模。\(n\le 10^{10^4}\).

纯数学题。

记斐波那契数列的生成函数,即

\[F(x)=\sum_{i=0}^{+\infty}f_ix^i \]

那么

\[F(x)=f_0+f_1x+f_2x^2+f_3x^3+f_4x^4+\dots \]

\[xF(x)=f_0x+f_1x^2+f_2x^3+f_3x^4+\dots \]

\[x^2F(x)=f_0x^2+f_1x^3+f_2x^4+\dots \]

分别记为 \((1),(2),(3)\).

\((2)+(3)\),由 \(f_i=f_{i-1}+f_{i-2}\)

\[(x+x^2)F(x)=f_2x^2+f_3x^3+f_4x^4+\dots \]

那么

\[F(x)=(x+x^2)F(x)+x \]

\[F(x)=\frac{x}{1-x-x^2} \]

其实分母长得有点像 \(f\) 的特征多项式。

\(g_n\)\(n\) 处的答案。

\[g_n=\sum_{i=0}^{n}g_if_{n-i} \]

边界 \(g_0=1\).

\[g_n=\lbrack n=0\rbrack+\sum_{i=0}^{n}g_if_{n-i} \]

\(g\) 的生成函数 \(G(x)=\sum_{i=0}^{+\infty}g_ix^i\),展开得

\[G(x)=\sum_{n=0}^{+\infty}(\lbrack n=0\rbrack+\sum_{i=0}^{n}g_if_{n-i})x^n \]

\[G(x)=1+\sum_{n=1}^{+\infty}(\sum_{i=0}^{n}g_if_{n-i})x^n \]

显然右式 \(=F(x)\times G(x)\).

因此

\[G(x)=1+F(x)\times G(x) \]

\[G(x)=\frac{1}{1-F(x)}=\frac{1}{1-\frac{x}{1-x-x^2}} \]

\[=\frac{1-x-x^2}{1-2x-x^2}=1-\frac{x}{x^2+2x-1} \]

考虑展开 \(-\frac{x}{x^2+2x-1}\)

\(x^2+2x-1=0\) 的两根为 \(x_{1,2}=-1\pm\sqrt{2}\).

\[-\frac{x}{x^2+2x-1}=-\frac{x}{(x-x_1)(x-x_2)} \]

\[=\frac{x}{x_2-x_1}(\frac{1}{x-x_1}-\frac{1}{x-x_2}) \]

括号里其实是 \(\frac{x_2-x_1}{(x-x_1)(x-x_2)}\).

\(\frac{1}{1-x}=\sum_{i=0}^{+\infty}x^i\) 去靠,将常数项化为 \(1\)

\[=\frac{x}{x_2-x_1}(\frac{1}{x_2}\times\frac{1}{1-\frac{x}{x_2}}-\frac{1}{x_1}\times\frac{1}{1-\frac{x}{x_1}}) \]

\[=\frac{x}{x_2-x_1}(\frac{1}{x_2}\times\sum_{i=0}^{+\infty}\frac{x^i}{x_2^i}-\frac{1}{x_1}\sum_{i=0}^{+\infty}\frac{x^i}{x_1^i}) \]

\[=\frac{1}{x_2-x_1}(\sum_{i=0}^{+\infty}\frac{x^{i+1}}{x_2^{i+1}}-\frac{x^{i+1}}{x_1^{i+1}}) \]

\(n\) 项的系数为

\[g(n)=\frac{1}{x_2-x_1}\times(\frac{1}{x_2^n}-\frac{1}{x_1^n}) \]

代入得

\[g(n)=\frac{\sqrt{2}}{4}\lbrack(1+\sqrt{2})^n-(1-\sqrt{2})^n\rbrack \]

同余方程

\[x\equiv\sqrt{2}\mod 1e9+7 \]

的解为 \(x_1=59713600\)\(x_2=940286407\).

困难。


P4389 付公主的背包

\(n\) 个物品,每个体积 \(v_i\),对于 \(s\in\lbrack 1,m\rbrack\) 问刚好装 \(s\) 体积的方案数。答案对 \(998244353\) 取模。

\(1\le n,m\le 10^5\).

对于单个 \(V\) 的生成函数是

\[A(x)=\sum_{i=0}^{+\infty}\lbrack V|i\rbrack x^i=\frac{1}{1-x^V} \]

答案的生成函数 \(F\) 是所有生成函数的卷积。

两边取对数:

\[\ln F=\sum_{i=1}^{n}\ln \frac{1}{1-x^{v_i}} \]

  • \(\displaystyle \ln (1-x^V)=-\sum_{i=1}^{+\infty}\frac{x^{iV}}{i}\).

\[\ln F(x)=G(x) \]

\[\frac{F'(x)}{F(x)}=G'(x) \]

\[\frac{-Vx^{V-1}}{1-x^V}=G'(x) \]

因为 \(\displaystyle\frac{1}{1-x^V}=\sum_{i\ge0}x^{iV}\)

\[-\sum_{i\ge0}Vx^{V-1+iV}=G'(x) \]

\[-\sum_{i\ge0}\frac{Vx^{V+iV}}{V+iV}=G(x) \]

\[-\sum_{i\ge1}\frac{x^{iV}}{i}=G(x) \]

相当于 \(O(m \log m)\) 求了 \(\ln\) 又求了和。

\(\exp\) 然后求逆即可。

record


The Child and Binary Tree

我测 *3100.

对于 \(s\in\lbrack1,m\rbrack\),求各点权都在集合 \(\{c\}\) 内的,点权和为 \(s\) 的有根二叉树总数。答案对 \(998244353\) 取模。

值域 \(10^5\).

\(f_i\) 为符合题意且点权和为 \(i\) 的二叉树个数,\(g_i=\lbrack i\in\{c\}\rbrack\).

\[f_n=\sum_{i=1}^{n}g_i\sum_{i=1}^{n-i}f_jf_{n-i-j} \]

边界值 \(f_0=1\).

\(F,G\) 分别为 \(f,g\) 的生成函数,则

\[F=G\cdot F^2+1 \]

由求根公式得

\[F=\frac{1\pm\sqrt{1-4G}}{2G} \]

然后一个奇怪理论:

若为 \(+\) 号,\(\displaystyle\lim_{x\rightarrow0}F(x)=+\infty\),舍去。

若为 \(-\) 号,\(\displaystyle\lim_{x\rightarrow0}F(x)=1\),符合。

\[F=\frac{1-\sqrt{1-4G}}{2G} \]

\[F=\frac{2}{1+\sqrt{1-4G}} \]

开根+求逆。

record


P4841 [集训队作业2013] 城市规划

求出 \( n\) 个点的简单有标号无向连通图数目。答案对 \(1004535809=479\times 2^{21}+1\) 取模。

\(n\le 130000\).

\(g_n\)\(n\) 个节点的有标号无向图个数,即 \(g_n=2^{\frac{n(n-1)}{2}}\).

\(f_n\)\(n\) 个节点的有标号无向连通图个数,考虑 \(1\) 所在连通块的节点数 \(k\),有

\[g_n=\sum_{k=1}^{n}\binom{n-1}{k-1}f_kg_{n-k} \]

把组合数拆开:

\[\frac{g_n}{(n-1)!}=\sum_{k=1}^{n}\frac{f_k}{(k-1)!}\cdot\frac{g_{n-k}}{(n-k)!} \]

变成了卷积的形式。

\[F(x)=\sum_{n=1}^{+\infty}\frac{f_n}{(n-1)!}x^n \]

\[G(x)=\sum_{n=0}^{+\infty}\frac{g_n}{n!}x^n \]

\[H(x)=\sum_{n=1}^{+\infty}\frac{g_n}{(n-1)!}x^n \]

那么有 \(H=F\times G\),故 \(F= H\times G^{-1}\),答案为 \(F_n\cdot (n-1)!\).

多项式求逆+乘法即可。

record(为什么跑不过大样例也AC了)


P4491 [HAOI2018] 染色

\(n\) 个格子可以染 \(m\) 种颜色,若有 \(k\) 种出现次数恰好\(S\) 的颜色,贡献为 \(W_k\).

求所有染色方案的总贡献对 \(1004535809 \) 取模的结果。

\(n\le 10^7\)\(m\le 10^5\)\(S\le 150\).

这个模数一眼多项式。

\(k\) 的上界 \(lim=\min(m,\lfloor\frac{n}{S}\rfloor)\).

容斥,计算出现 \(S\) 次的有至少 \(i\) 种的方案数 \(g_i\).

钦定 \(i\) 种颜色各 \(S\) 个,其余 \(m-i\) 种颜色共 \(n-iS\) 个,加上可重全排列即

\[g_i=\binom{m}{i}\cdot\frac{n!}{(S!)^i(n-iS)!}\cdot(m-i)^{n-iS} \]

记正好 \(i\) 种的为 \(f_i\),二项式反演

\[f_i=\sum_{j=1}^{lim}(-1)^{j-i}\cdot\binom{j}{i}\cdot g_j \]

\[=\sum_{j=i}^{lim}(-1)^{j-i}\cdot\frac{j!}{i!(j-i)!}\cdot g_j \]

那么

\[f_i\cdot i!=\sum_{j=i}^{lim}\frac{(-1)^{j-i}}{(j-i)!}\cdot g_j\cdot j! \]

\[F(x)=\frac{(-1)^x}{x!} \]

\[G(x)=g_x\cdot x! \]

\[f_k=\frac{1}{k!}\sum_{i=k}^{lim}F(i-k)G(i) \]

\[f_k=\frac{1}{k!}\sum_{i=0}^{lim-k}F(i)G(i+k) \]

这里的卷积可以用 [ZJOI2014]力 的套路,记 \(G\) 反转后的函数 \(G'\) 满足 \(G'(x)=G(lim-x)\),即

\[f_k=\frac{1}{k!}\sum_{i=0}^{lim-k}F(i)G'(lim-k-i) \]

\(F\)\(G'\) 卷起来,记为 \(H\),那么 \(f_k\) 对应的就是 \(H(lim-k)\).

答案为

\[\sum_{i=0}^{lim}W_i\cdot\frac{1}{i!}\cdot H(lim-i) \]

时间复杂度 \(O(m\log m)\).

2023.7.9 23:44 水杯哥的热点就是好用


P5488 差分与前缀和

求长为 \(n\) 的序列 \(a\)\(k\) 阶差分或前缀和。

答案对 \(1004535809\) 取模。

\(a\) 看成一个 OGF

\[F(x)=\sum_{i=0}^{\infty}a_ix^i \]

计算前缀和只需让 \(F\) 卷上 \(\displaystyle G(x)=\sum_{i=0}^{\infty}x^i=\frac{1}{1-x}\).

同理计算差分让 \(F\) 卷上 \(G(x)=1-x\) 即可。

\(k\) 阶前缀和即 \(\displaystyle F\times(\frac{1}{1-x})^k\).

\(k\) 阶差分即 \(F\times (1-x)^k\).

record


P5748 集合划分计数

贝尔数 \(B_n\) 表示将 \(n\) 个元素划分若干非空子集的方案数。

\(1000\) 组数据求 \(B_n(n\le 10^5)\),答案对 \(998244353\) 取模。

考虑递推:

\[B_n=\sum_{k=0}^{n-1}\binom{n-1}{k}B_{n-k-1} \]

\[B_{n+1}=\sum_{k=0}^{n}\binom{n}{k}B_{n-k} \]

\(B_n\) 的 EGF 为 \(B(x)\),即 \(\displaystyle\sum_{i=0}^{\infty}B_i\cdot \frac{x^i}{i!}\).

那么

\[\frac{B_{n+1}}{(n+1)!}=\sum_{i=0}^{n}\frac{B_{n-i}}{(n-i)!}\cdot\frac{1}{(n+1)i!} \]

\[(n+1)\cdot\frac{B_{n+1}}{(n+1)!}=\sum_{i=0}^{n}\frac{B_{n-i}}{(n-i)!}\cdot\frac{1}{i!} \]

数列 \(a_i=1\) 的 EGF 为 \(F(x)=e^x\),证明需要用到泰勒展开。

\[[x^n]B'(x)=\sum_{i=0}^{n}[x^{n-i}]B(x)\cdot[x^i]e^x \]

\[B'(x)=B(x)e^x \]

\[\frac{dB(x)}{dx}=B(x)e^x \]

\[\frac{dy}{dx}=e^x y \]

\[\int\frac{dy}{y}=\int e^x dx \]

\[\ln y=e^x+C \]

\[y=e^{e^x+C} \]

\(B_0=1\) 可得 \(C=-1\).

故有 \(B(x)=e^{e^x-1}\),那么 \(B_x=B(x)\cdot x!\).

\(\displaystyle F(x)=-1+\sum_{i=0}^{\infty}\frac{1}{i!}x^i=\sum_{i=1}^{\infty}\frac{1}{i!}x^i\) 做一遍 exp 即可。

record


P5824 十二重计数法

求将 \(n\) 个球放进 \(m\) 个盒子里的方案数。

答案对 \(998244353\) 取模。值域 \(\rm2e5\).

假设 \(n,m\) 同阶。

\(1.\) 球有标号,盒子有标号

答案为 \(m^n\).

\(2.\) 球有标号,盒子有标号,盒子至多放一个

每次挑一个未选的,答案为 \(m^{\underline n}\).

\(3.\) 球有标号,盒子有标号,盒子至少装一个

容斥,枚举空盒数,答案为

\[\sum_{i=0}^{m}(-1)^i\binom{m}{i}(m-i)^n \]

\(4.\) 球有标号,盒子无标号

考虑第二类斯特林数,答案为 \(\displaystyle\sum_{i=1}^{m}\begin{Bmatrix}n\\i\end{Bmatrix}\).

把模板搬上来,时间复杂度 \(O(n\log n)\).

\(5.\) 球有标号,盒子无标号,盒子至多装一个

思考一下就是无论怎么放都是一样的,答案为 \([n\le m]\).

\(6.\) 球有标号,盒子无标号,盒子至少装一个

答案即 \(\displaystyle\begin{Bmatrix}n\\m\end{Bmatrix}\).

\(7.\) 球无标号,盒子有标号

利用插板法得答案为 \(\displaystyle\binom{n+m-1}{m-1}\).

\(8.\) 球无标号,盒子有标号,盒子至多装一个

即选出 \(n\) 个盒子装球,答案为 \(\displaystyle\binom{m}{n}\).

\(9.\) 球无标号,盒子有标号,盒子至多装一个

先钦定每个盒子都放了一个再插板,答案为 \(\displaystyle\binom{n-1}{m-1}\).

\(10.\) 球无标号,盒子无标号

记划分数 \(p_{n,m}\) 为将 \(n\) 划分为 \(m\) 个自然数的可重集的拆分数,有

\[p_{i,j}=p_{i-j,j}+p_{i,j-1} \]

意思就是将 \(j\) 个自然数同时 \(+1\) 或将一个 \(0\) 加入可重集中,计数是不重不漏的。

构造多项式

\[F_i(x)=\sum_{j=0}^{i}p_{j,i}x^j \]

那么

\[F_i(x)=F_{i-1}(x)\times(1+x^i+x^{2i}+\dots) \]

\[F_i(x)=\frac{F_{i-1}(x)}{1-x^i} \]

\[F_i(x)=\prod_{j=1}^{i}\frac{1}{1-x^j} \]

这里就和付公主的背包一样了,一并复制过来。时间复杂度 \(O(n\log n)\).

\(11.\) 球无标号,盒子无标号,盒子至多装一个

\(5.\) 一样,答案为 \([n\le m]\).

\(12.\) 球无标号,盒子无标号,盒子至少装一个

\(7.\rightarrow9.\) 一样,答案为 \(p_{n-m,m}\).

总时间复杂度 \(O(n\log n)\).

record


P2000 拯救世界

根据题意,把下面十个生成函数乘起来:

\[1+x^6+x^{12}+\dots=\frac{1}{1-x^6} \]

\[1+x+\dots+x^9=\frac{1-x^{10}}{1-x} \]

\[1+x+\dots+x^5=\frac{1-x^6}{1-x} \]

\[1+x^4+x^8+\dots=\frac{1}{1-x^4} \]

\[1+x+\dots+x^7=\frac{1-x^8}{1-x} \]

\[1+x^2+x^4+\dots=\frac{1}{1-x^2} \]

\[1+x=\frac{1-x^2}{1-x} \]

\[1+x^8+x^{16}+\dots=\frac{1}{1-x^8} \]

\[1+x^{10}+x^{20}+\dots=\frac{1}{1-x^{10}} \]

\[1+x+\dots+x^3=\frac{1-x^4}{1-x} \]

\(\displaystyle\frac{1}{(1-x)^5}\).

思考怎么求这个东西的 \(n\) 次项。

假设组合数推广到负数,且对于整数 \(n<0\)\(m\ge0\)

\[\binom{n}{m}=\frac{n(n-1)(n-2)\dots(n-m+1)}{m!} \]

首先有

\[(x+1)^n=\sum_{i=0}^{\infty}\binom{n}{i}x^i \]

将指数推广至负数,此时的组合数即:

\[\binom{-n}{m}=\frac{(-n)(-n-1)\dots(-n-m+1)}{m!} \]

把分子的所有项取反:

\[\binom{-n}{m}=(-1)^{(-n)-(-n-m+1)+1}\cdot\frac{n(n+1)\dots(n+m-1)}{m!} \]

\[=(-1)^m\cdot\binom{n+m-1}{m} \]

那么

\[(x+1)^{-n}=\sum_{i=0}^{\infty}\binom{-n}{i}x^i=\sum_{i=0}^{\infty}(-1)^i\binom{n+i-1}{i}x^i \]

从最初的开始,考虑将 \(x\) 取负:

\[(1-x)^n=\sum_{i=0}^{\infty}(-1)^i\binom{n}{i}x^i \]

把这里的 \(n\) 也取负:

\[(1-x)^{-n}=\sum_{i=0}^{\infty}\binom{n+i-1}{i}x^i \]

\(n'=5\) 代入:

\[[x^n]\frac{1}{(1-x)^5}=\binom{n+5-1}{n} \]

\[=\binom{n+4}{n}=\binom{n+4}{4} \]

答案就是 \(\displaystyle\frac{(n+1)(n+2)(n+3)(n+4)}{24}\).

本题大数相乘还要至少弄两遍 \(\rm poly\)。最后暴力除以 \(24\).

record


P3784 [SDOI2017] 遗忘的集合

付公主的背包逆向版。给出方案总数 \(f\),还原集合 \(S\).

也就是有

\[F_i(x)=\Big(\sum_{n\ge0}x^{ni}\Big)^{a_i}=\Big(\ \frac{1}{1-x^i}\Big)^{a_i} \]

已知

\[F(x)=\prod_{i=1}^{n} F_i(x) \]

试还原 \(\{a_i\}\).

\(1\le n<2^{18}\)\(10^6\le p<2^{30}\)\(0\le f(i)<p\).

本题需要使用 \(\rm MTT\).

不难想到两边取 \(\ln\)

\[\ln F(x)=-\sum_{i\ge1}a_i\ln(1-x^i) \]

\[=\sum_{i\ge1}a_i\sum_{n\ge1}\frac{x^{ni}}{n} \]

考虑枚举 \(t=ni\)

\[\sum_{t\ge1}\sum_{i|t}a_i\cdot\frac{x^t}{t/i}=\sum_{t\ge1}\Bigg(\sum_{i|t}a_i\frac{i}{t}\Bigg)\cdot x^t \]

那么

\[[x^t]\ln F(x)=\sum_{i|t}a_i\frac{i}{t} \]

\[t[x^t]\ln F(x)=\sum_{i|t}a_ii \]

考虑数论函数

\[f(n)=n[x^n]\ln F(x) \]

\[g(n)=a_nn \]

那么

\[f=g * I \]

\[f * \mu=g \]

容易发现答案是唯一的。

学习一下 zhiyangfan 的 MTT \(\ln\) 板子。

record