生成函数 & 多项式题目
OGF & 其他
奇怪的构造和技巧可能也放进来了。
*P4451 [国家集训队]整数的lqp拆分
求
\(f\) 是斐波那契数列,\(f_0=0\),\(f_1=1\).
答案对 \(1e9+7\) 取模。\(n\le 10^{10^4}\).
纯数学题。
记斐波那契数列的生成函数,即
那么
分别记为 \((1),(2),(3)\).
\((2)+(3)\),由 \(f_i=f_{i-1}+f_{i-2}\) 得
那么
其实分母长得有点像 \(f\) 的特征多项式。
设 \(g_n\) 为 \(n\) 处的答案。
边界 \(g_0=1\).
设 \(g\) 的生成函数 \(G(x)=\sum_{i=0}^{+\infty}g_ix^i\),展开得
显然右式 \(=F(x)\times G(x)\).
因此
考虑展开 \(-\frac{x}{x^2+2x-1}\):
\(x^2+2x-1=0\) 的两根为 \(x_{1,2}=-1\pm\sqrt{2}\).
括号里其实是 \(\frac{x_2-x_1}{(x-x_1)(x-x_2)}\).
往 \(\frac{1}{1-x}=\sum_{i=0}^{+\infty}x^i\) 去靠,将常数项化为 \(1\):
第 \(n\) 项的系数为
代入得
同余方程
的解为 \(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\) 的生成函数是
答案的生成函数 \(F\) 是所有生成函数的卷积。
两边取对数:
- \(\displaystyle \ln (1-x^V)=-\sum_{i=1}^{+\infty}\frac{x^{iV}}{i}\).
因为 \(\displaystyle\frac{1}{1-x^V}=\sum_{i\ge0}x^{iV}\):
相当于 \(O(m \log m)\) 求了 \(\ln\) 又求了和。
\(\exp\) 然后求逆即可。
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\),有
把组合数拆开:
变成了卷积的形式。
记
那么有 \(H=F\times G\),故 \(F= H\times G^{-1}\),答案为 \(F_n\cdot (n-1)!\).
多项式求逆+乘法即可。
The Child and Binary Tree
对于 \(s\in\lbrack1,m\rbrack\),求各点权都在集合 \(\{c\}\) 内的,点权和为 \(s\) 的有根二叉树总数。答案对 \(998244353\) 取模。
值域 \(10^5\).
记 \(f_i\) 为符合题意且点权和为 \(i\) 的二叉树个数,\(g_i=\lbrack i\in\{c\}\rbrack\).
边界值 \(f_0=1\).
令 \(F,G\) 分别为 \(f,g\) 的生成函数,则
由求根公式得
然后一个奇怪理论:
若为 \(+\) 号,\(\displaystyle\lim_{x\rightarrow0}F(x)=+\infty\),舍去。
若为 \(-\) 号,\(\displaystyle\lim_{x\rightarrow0}F(x)=1\),符合。
开根+求逆。
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\) 个,加上可重全排列即
记正好 \(i\) 种的为 \(f_i\),二项式反演
那么
令
有
这里的卷积可以用 [ZJOI2014]力 的套路,记 \(G\) 反转后的函数 \(G'\) 满足 \(G'(x)=G(lim-x)\),即
把 \(F\) 和 \(G'\) 卷起来,记为 \(H\),那么 \(f_k\) 对应的就是 \(H(lim-k)\).
答案为
时间复杂度 \(O(m\log m)\).
P5488 差分与前缀和
求长为 \(n\) 的序列 \(a\) 的 \(k\) 阶差分或前缀和。
答案对 \(1004535809\) 取模。
把 \(a\) 看成一个 OGF
计算前缀和只需让 \(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\).
*P5824 十二重计数法
求将 \(n\) 个球放进 \(m\) 个盒子里的方案数。
答案对 \(998244353\) 取模。值域 \(\rm2e5\).
假设 \(n,m\) 同阶。
\(1.\) 球有标号,盒子有标号
答案为 \(m^n\).
\(2.\) 球有标号,盒子有标号,盒子至多放一个
每次挑一个未选的,答案为 \(m^{\underline n}\).
\(3.\) 球有标号,盒子有标号,盒子至少装一个
容斥,枚举空盒数,答案为
\(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\) 个自然数的可重集的拆分数,有
意思就是将 \(j\) 个自然数同时 \(+1\) 或将一个 \(0\) 加入可重集中,计数是不重不漏的。
构造多项式
那么
这里就和付公主的背包一样了,一并复制过来。时间复杂度 \(O(n\log n)\).
\(11.\) 球无标号,盒子无标号,盒子至多装一个
和 \(5.\) 一样,答案为 \([n\le m]\).
\(12.\) 球无标号,盒子无标号,盒子至少装一个
与 \(7.\rightarrow9.\) 一样,答案为 \(p_{n-m,m}\).
总时间复杂度 \(O(n\log n)\).
P2000 拯救世界
根据题意,把下面十个生成函数乘起来:
即 \(\displaystyle\frac{1}{(1-x)^5}\).
思考怎么求这个东西的 \(n\) 次项。\(10^{99999}\le n<10^{100000}\)。
假设组合数推广到负数,且对于整数 \(n<0\),\(m\ge0\):
首先有
将指数推广至负数,此时的组合数即:
把分子的所有项取反:
那么
从最初的开始,考虑将 \(x\) 取负:
把这里的 \(n\) 也取负:
把 \(n'=5\) 代入:
答案就是 \(\displaystyle\frac{(n+1)(n+2)(n+3)(n+4)}{24}\).
本题大数相乘还要至少弄两遍 \(\rm poly\)。最后暴力除以 \(24\).
*P3784 [SDOI2017] 遗忘的集合
付公主的背包逆向版。给出方案总数 \(f\),还原集合 \(S\).
也就是有
已知
试还原 \(\{a_i\}\),其中 \(a_i\in\{0,1\}\)。
\(1\le n<2^{18}\),\(10^6\le p<2^{30}\),\(0\le f(i)<p\).
本题需要使用 \(\rm MTT\).
不难想到两边取 \(\ln\):
考虑枚举 \(t=ni\):
那么
考虑数论函数
那么
容易发现答案是唯一的。
抄了有 \(\ln\) 的 MTT 板子。
[ABC318Ex] Count Strong Test Cases
有两个排列 \(\{P_n\}\) 和 \(\{Q_n\}\).
对于 \(i\in[1,n]\),连边 \(i\xrightarrow{Q_i}P_i\).
Alice 和 Bob 试图在图上消环,独立地执行如下操作:
初始令答案为 \(0\).
-
Alice 从 \(1\) 到 \(n\) 遍历 \(i\),若 \(i\rightarrow P_i\) 在环中,删去这条边,将 \(Q_i\) 加到答案中。
-
Bob 从 \(n\) 到 \(1\) 遍历 \(i\),若 \(i\rightarrow P_i\) 在环中,删去这条边,将 \(Q_i\) 加到答案中。
试问在 \((n!)^2\) 种 \(P\) 和 \(Q\) 的组合中,有多少种满足 Alice 和 Bob 的答案都不是最小值。
\(n\le 2\times 10^5\).
答案即 总方案数 \(-\) Alice AC 且 Bob AC 的方案数 \(-\) Alice AC 且 Bob WA 的方案数 \(-\) Alice WA 且 Bob AC 的方案数。
-
Alice AC 当且仅当对于每个环,最小的 \(i\) 对应的 \(Q_i\) 最小。
-
Bob AC 当且仅当对于每个环,最大的 \(i\) 对应的 \(Q_i\) 最小。
容易发现 Alice AC 且 Bob WA 和 Alice WA 且 Bob AC 的情况是一样的。只考虑计算 Alice AC 且 Bob WA 的情况。
假设大小为 \(i\) 的环有 \(C_i\) 个,对所有的 \(C_i\) 求下式的和:
-
\(\displaystyle n!\prod_{i=1}^{n}\frac{1}{i!^{C_i}}\) 表示对所有环做多重全排列。
-
\(\displaystyle \frac{1}{(\sum_{i=1}^{n}C_i)!}\) 表示将 \(\displaystyle \sum C_i\) 个环排序。
-
\(\displaystyle \prod_{i=1}^{n}(i-1)!^{C_i}\) 表示将非最小点任意排序。
-
\(\displaystyle n!\prod_{i=1}^{n}(\frac{1}{i})^{C_i}\) 表示所有的排列 \(Q\),每个环的最小下标取到最小值的概率为 \(\displaystyle \frac{1}{|c|}\).
将这个式子化简:
另外,对于多项式 \(f\) 满足 \([x^0]f=0\),有
记 \(\displaystyle f(x)=\sum_{i=1}^{n}\frac{1}{i^2}x^i\),那么我们想要的就是
还需要去掉这样统计到的 Bob AC 的情况,也就是 \(C_1=n\),容易发现 \(P=\{1,2,\dots,n\}\),\(Q\) 可以任意排列,方案数为 \(n!\).
也就是
另外还要计算 Alice AC 且 Bob AC 的情况。这种在 Alice AC 的情况中被计算了一次,Bob 同理,那么最后应该剩下一个正的 \(n!\).
最后答案为
P3321 [SDOI2015] 序列统计
问有多少个值域为 \(S\) 的序列 \(A\) 满足 \(\prod_{i=1}^{n}A_i\equiv x(\operatorname{mod}m)\).
答案对 \(1004535809\) 取模。
\(1\le n\le 10^9\),\(3\le m\le 8000\),\(1\le x<m\),\(S\) 中的元素为 \(<m\) 的非负整数且互不相同。
保证 \(m\) 为质数。
最朴素的卷积显然是
时间复杂度 \(O(m^2\log n)\).
看到 \(1004535809,m\in P\) 不难想到要在多项式上做功夫。
\(m\) 的原根 \(g\) 满足 \(g^k,k\in[0,m-2]\) 在模 \(m\) 意义下互不相同。
不妨取对数,那么 \(a+b\equiv c(\operatorname{mod}m-1)\).
故可以将一个数 \(a\leftarrow \log_g a(\operatorname{mod}m)\),\(g\) 是 \(m\) 的原根。
那么
具体地,在求卷积时加上
for(int i=0;i<m-1;i++)
(c[i]+=c[i+m-1])%=P,c[i+m-1]=0;
把 \(0\sim 2m-1\) 放进去卷积即可。时间复杂度 \(O(m\log m\log n)\).
找原根即 \(\displaystyle \forall_{p|P,p|\varphi(m)},g^{\frac{\varphi(m)}{p}}\not\equiv1(\operatorname{mod}m)\),可以认为复杂度线性。
枚举 \(g^k\) 可以得到 \(g^k\rightarrow k\) 的映射。
[AGC047C] Product Modulo
求
其中 \(P=200003\),一个质数。
不考虑 \(i,j\) 大小限制,直接使用上一题的方法构造初始数组 \(f\),那么答案即
思考一下发现只能使用 FFT。时间复杂度 \(O(n\log n)\).
*K Paths
给出一棵树,选出 \(k\) 条可重的路径(有顺序之分),问有多少种方案使得树上的每条边被覆盖 \(0\),\(1\) 或 \(k\) 次。
答案对 \(998244353\) 取模。
\(n\le 10^5\).
对于 \(k=1\) 直接特判。
枚举路径交 \(u\rightarrow v\).
- \(u,v\) 在不同子树
记 \(f_u\) 为 \(u\) 的子树中填 \(k\) 条无交路径的方案数,即求 \(f_u\times f_v\).
\(u,v\) 的子树内可以任意选点,每颗子树最多选 \(1\) 个。
构造生成函数
同时可以选择 \(u\rightarrow u\) 这条路径若干次。即
可以分治 NTT.
- \(u,v\) 在同一子树
考虑在祖先处统计贡献。
记 \(s_u\) 为子树 \(u\) 的 \(f\) 之和。构造
思考一下表示的就是子树 \(v\),子树 \(u\) 内的其他子树 \(w\),子树 \(u\) 外。
\(G\) 可以和 \(F\) 同步计算,即
然后容斥掉所有祖先后代关系的 \(f_u\times f_v\).
时间复杂度 \(O(n\log^2 n)\).
vector
直接塞二元组有点毒瘤,得加 int
.
P2012 拯救世界2
已知
求
答案模 \(10^9\).
\(T\le 2\times 10^5\),\(1\le n<2^{63}\).
这三者的封闭形式记结论就好了。
记 \(A(x)=(f(x)g(x)h(x))^4\).
答案即
把这个分母去掉。\(n\) 极小时直接计算即可。
剩下的用扩展欧拉定理优化。
对四个底数光速幂即可。三个也可以。
P5110 块速递推
已知递推式
多次询问 \(a_n\) 模 \(10^9+7\) 的值。
数据随机,在 ull
范围内,\(T\le 5\times 10^7\).
不会行列式,特征方程还是太难了。
记其 OGF 为 \(F(x)\),则
有
有 \(\sqrt{56953}\equiv188305837\pmod{10^9+7}\).
令
待定系数得
可得
解得 \(\displaystyle A=-\frac{1}{\sqrt{56953}},B=\frac{1}{\sqrt{56953}}\).
答案即
对 \(\alpha,\beta\) 光速幂即可。使用扩展欧拉定理。
C++20
不支持定义beta
.
P7431 [THUPC2017] 小 L 的计算题
给出 \(\{a_n\}\),求数列 \(\{f_n\}\),满足
输出所有 \(f_k\) 的异或和即可。多测。
\(1\le n\le 2\times 10^5\),\(\sum n\le 4\times 10^5\),\(0\le a_i\le 10^9\)。
做了整整五个钟啊。。。
考虑答案的 OGF
将这些分式相加,考虑分治 NTT。
有 \(\dfrac{a}{b}+\dfrac{b}{d}=\dfrac{ad+bc}{bd}\)。
时间复杂度 \(O(n\log^2 n)\),卡点常。
*[ABC260Ex] Colorfulness
给出 \(n\) 个球,球 \(i\) 上有数字 \(a_i\)。
记 \(C(P)\) 为排列 \(P\) 中异色相邻小球的对数。
对 \(k\in[1,m]\) 分别求出 \(\displaystyle \sum_{P}C(P)^k\)。
\(2\le n\le 2.5\times 10^5\),\(1\le m\le 2.5\times 10^5\),\(1\le a_i\le n\)。
两个问题:
-
求出 \(C(P)=i\) 的排列数 \(f_i\)。
-
对 \(k\in[1,m]\),求 \(\displaystyle \sum_{i=0}^{n-1}f_i\cdot i^k\)。
看第二个,和前面那个题差不多,即 \(\displaystyle \sum_{i=1}^{n-1}\frac{f_i}{1-ix}\),分治 NTT 复杂度 \(O(n\log^2 n)\)。
先鸽掉。
P5860 「SWTR-3」Counting Trees
已知点 \(i\) 的度为 \(v_i\),问选出若干点使其能构成树的方案数。模 \(998244353\)。
\(2\le n\le 5\times 10^5\),\(1\le v_i\le n\)。
转化条件,即 \(\sum v_i=2|S|-2\)。
令 \(a_i=v_i-2\),即求 \(\displaystyle [x^{-2}]\prod (1+x^{a_i})\)。
\(a_i=0\) 的,直接答案乘 \(2\)。
\(a_i=-1\) 的,枚举选了 \(m\) 个,贡献为 \([x^{m-2}]F(x)\),乘上一个组合数。
又 \(\displaystyle \ln(1-x)=-\sum_{i=1}\frac{x^i}{i}\),有 \(\displaystyle \ln(1+x^z)=-\sum_{i=1}\frac{(-x^z)^{i}}{i}=\sum_{i=1}\frac{(-1)^{i+1}x^{iz}}{i}\)。
和付公主基本一样。
EGF
P5748 集合划分计数
贝尔数 \(B_n\) 表示将 \(n\) 个元素划分若干非空子集的方案数。
\(1000\) 组数据求 \(B_n(n\le 10^5)\),答案对 \(998244353\) 取模。
考虑递推:
设 \(B_n\) 的 EGF 为 \(B(x)\),即 \(\displaystyle\sum_{i=0}^{\infty}B_i\cdot \frac{x^i}{i!}\).
那么
数列 \(a_i=1\) 的 EGF 为 \(F(x)=e^x\),证明需要用到泰勒展开。
由 \(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 即可。
P7364 有标号二分图计数
对 \(n\in[1,10^5]\) 求出 \(n\) 的点的有标号二分图数目。答案模 \(998244353\)。
设有标号二分连通图的 \(\mathrm{EGF}\) 为 \(F(x)\),有标号二分图的 \(\mathrm{EGF}\) 为 \(G(x)\):
设二分染色图的 \(\mathrm{EGF}\) 为 \(H(x)\),有 \(\displaystyle h_n=\sum_{i=0}^{n}\binom{n}{i}2^{i(n-i)}\)。
给连通图的一个点钦定颜色即可确定整个连通图的颜色,即
有 \(G(x)=\sqrt{H(x)}\),计算 \(H(x)\) 即可:
折磨能凑。时间复杂度 \(O(n\log n)\)。
P5850 calc加强版
定义数列 \(\{a_n\}\) 的价值为 \(\prod_{i=1}^{n}a_i\)。
对于所有满足以下条件的 \(\{a_n\}\) 求价值和:
- \(a_1,\dots,a_n\) 为 \([1,k]\) 中互不相同的整数。
给出 \(k,m\),对于 \(i\in[1,m]\) 求出 \(n=i\) 时的答案模 \(998244353\)。
\(1\le m\le 5\times 10^5\),\(m\le k<998244353\)。
假设 \(\{a_n\}\) 有序,将答案乘上 \(n!\) 即可。
写出其 OGF
见付公主的背包,我们已知 \(\displaystyle \ln(1-x)=-\sum_{i=1}^{n}\frac{x^i}{i}\)。
还要求自然数幂和,记其 EGF
发现 \(e^x-1\) 的常数项为 \(0\),上下同除 \(x\) 就可以求逆了。
时间复杂度 \(O(n\log n)\)。
要卡常。加法取模优化,预处理单位根,加个 inline
。
P7092 计数题
记集合 \(T\) 为由所有 \(\le n\) 的质数与它们的乘积组成的无限大集合,求
另外有 \(k\in\{0,1,2\}\) 表示如下限制:
-
\(k=0\):\(S\) 中至少含有一个完全平方数。
-
\(k=1\):\(S\) 中只能含有质数。
-
\(k=2\):无任何限制。
答案模 \(998244353\)。\(n\le 10^6\)。
\(k\ne 2\) 是简单的。
首先 \(k=0\) 显然是 \(0\)。
\(k=1\) 的话就是每个质数选和不选,贡献分别为 \(1\) 和 \(\mu(p)\varphi(p)=-(p-1)\),答案就是 \(\displaystyle \prod_{p\le n}(2-p)\),减去空集的 \(1\)。但是你发现存在 \(p=2\),答案一定是 \(-1\)。
\(k=2\) 时 \(S\) 又有了 \(\text{square-free number}\),显然将 \(n\) 个质数分配的方案数就是贝尔数 \(B_n\)。
再考虑选出 \(n\) 个质数相乘的总和,记 \(\displaystyle F(x)=\prod_{p\le n}(1-(p-1)x)\),要的就是 \([x^n]F(x)\)。
答案是 \(\displaystyle \sum_{i=1} [x^i]F(x)\cdot B_i\)。
求 \(F(x)\) 分治 NTT 即可。
令 \(m=\pi(n)\),时间 \(O(m\log^2 m)\),\(m\) 的上界是 \(78498\)。
Lust
给定 \(\{a_n\}\),初始 \(\mathrm{ans}=0\),执行 \(k\) 次如下操作:
选择一个 \(i\),\(a_i\leftarrow a_i-1\),\(\mathrm{ans}\leftarrow\mathrm{ans}+\prod_{j\ne i}a_j\)。
求 \(\mathrm{ans}\) 的期望值模 \(10^9+7\)。
\(\mathrm{ans}\) 就是 \(\prod a_i-\prod(a_i-b_i)\),\(b_i\) 为对 \(a_i\) 操作的次数。
即求
提出来 \(\prod a_i\) 的常数。和式左边是可重排列。只需研究
对元素 \(j\) 构造 \(\mathrm{EGF}\),有
那么
我们想要的是 \([x^k]\prod F_i(x)\)。记 \(F(x)=\prod (a_i-x)\),那么
答案为
PGF
定义形式幂级数 \(A(x)\),称其为离散随机变量 \(X\) 的概率生成函数(PGF),当且仅当对于 \(A(x)\) 的每一项 \(a_i\),都有 \(a_i=P(X=i)\)。
性质
-
\(A(1)=\sum_{i=0}^{\infty}P(X=i)=1\)
-
\(A'(1)=\sum_{i=0}^{\infty}iP(X=i)1^{i-1}=E(x)\)
*P4548 [CTSC2006] 歌唱王国
给定序列 \(\{A_n\}\),每次投出一个标有 \(1\) 到 \(m\) 的公平骰子生成序列 \(B\),当 \(A\) 为 \(B\) 的后缀时停止,问 \(B\) 的期望长度 \(\bmod 10^4\)。多测。
\(T\le 50\),\(n,m\le 10^5\)。
定义数组 \(a_i\) 表示 \(A[:i]\) 是否为 \(A\) 的 border。
定义 \(f_i\) 表示掷 \(i\) 次骰子结束的概率,\(g_i\) 为掷 \(i\) 次骰子后仍未结束的概率。记 \(f_i\) 的 PGF 为 \(F(x)\),\(g_i\) 的概率型生成函数为 \(G(x)\)。
\((1).\) 若第 \(i\) 次未结束,则 \(i+1\) 只能结束或未结束,即 \(g_i=f_{i+1}+g_{i+1}\),则
\((2).\) 在一个未结束的串后加上 \(A\),游戏一定结束,但可能是由接上了 \(A\) 的一个 border 导致结束的,可以得到
左式表示在当前序列后强制加上序列 \(A\)。
右式表示接上 \(A\) 的长为 \(n-i\) 的后缀。
对 \((1)\) 两侧求导得
令 \(x=1\),则 \(E(x)=F'(x)=G(1)\)。
对 \((2)\),左右同乘 \(m^n\),代入 \(x=1\):
又 \(F(1)=1\),有
KMP 即可。时间复杂度 \(O(Tn)\)。
*P3706 [SDOI2017] 硬币游戏
给 \(n\) 个长为 \(m\) 的 \(01\) 序列 \(A_i\)(互不相同),初始有一空序列 \(B\),每次等概率向 \(B\) 末尾添加 \(0\) 或 \(1\)。若 \(A_i\) 最先作为 \(B\) 的后缀出现则 \(i\) 获胜,对 \(i\in[1,n]\) 求其胜率。
\(1\le n,m\le 300\)。
定义 \(P(A_i)=\prod_{i\in A_i}P_i=2^{|A_i|}\),\(a_{i,j,k}\) 表示 \(A_i[:k]\) 是否和 \(A_j[m-k+1:]\) 相等。
定义 \(f_{i,j}\) 表示 \(A_i\) 首次出现且 \(|B|=j\) 的概率,其概率型生成函数为 \(F_i(x)\)。
定义 \(g_i\) 表示 \(|B|=i\) 时仍未结束的概率,生成函数为 \(G(x)\)。
和上一题一样可以得到:
令 \(x=1\):
又因为
这样就得到了 \(n+1\) 个变量和 \(n+1\) 个方程,高斯消元即可。
时间复杂度 \(O(n^3)\)。
单位根反演
Lemma 1
当 \(n\mid k\) 时,\(\omega_{n}^{ik}=1\),成立。
当 \(n\not\mid k\) 时,右式等比数列求和可得 \(\displaystyle\frac{1}{n}\cdot\frac{\omega_{n}^{nk}-1}{\omega_{n}^{k}-1}=0\).
Lemma 2
一个 \(n\) 次多项式 \(f(x)\) 的所有 \(k\) 的倍数次的系数之和
利用 Lemma 1 展开得
Lemma 3
- 长度为 \(n\) 的多项式 \(A,B\) 的循环卷积为对 \(A,B\) 分别 DFT 点乘后 IDFT 的结果。
考虑单位根反演:
艾弗森括号可以转化为 \([n\mid i+j-k]\):
可以得到该结论。
先放个自己能做的丁真题。
P10084 [GDKOI2024 提高组] 计算
定义 \(F(x,a,b)=\gcd(x^a-1,x^b-1)+1\),\(x>0\)。
特别地,若 \(a=0\) 或 \(b=0\),\(F(x,a,b)=0\)。
给出非负整数 \(m,a,b,c,d\),令 \(L=F(m,a,b)+1\),\(R=F(m,c,d)\)。
问集合 \(\{L,L+1,\dots,R-1,R\}\) 有多少子集和为 \(m\) 的倍数。答案模 \(998244353\)。多测。
\(m\le 10^7\),\(L<R\le 10^{18}\),\(a,b,c,d\le 10^3\),\(T\le 10^4\)。
感觉考场上去想是会做的。有点可惜。
显然有 \(\gcd(x^a-1,x^b-1)=x^{\gcd(a,b)}-1\)。
发现 \(R-L+1\) 为 \(m\) 的倍数,即求 \(\displaystyle \prod_{i=0}^{m-1}(1+x^i)^n\) 第 \(0,m,2m,\dots\) 项的系数之和,其中 \(n=\dfrac{R-L+1}{m}\)。
- \(m\) 为奇质数
记刚才的 OGF 为 \(F(x)=a_0x^0+a_1x^1+\dots\)。
代入 \(x=\omega_m^0=1\) 有 \(a_0+a_1+\dots=2^{mn}\)。
代入 \(x=\omega_m^i\),\(i\in[1,m)\) 有 \(\displaystyle a_0+a_1\omega_m^i+a_2\omega_m^{2i}+\dots=\Big(\prod_{j=0}^{m-1}(1+\omega_m^{ij})\Big)^n\)。
由单位根性质有 \(\displaystyle \sum_{i=0}^{m-1}\omega_m^i=0\),\(\displaystyle z^m-1=\prod_{i=0}^{m-1}(z-\omega_m^i)\)(分圆多项式)。
令 \(z=-1\),则 \(\displaystyle \prod_{i=0}^{m-1}(1+\omega_m^i)=2\)。
有 \(\displaystyle a_0+a_m+\dots=\frac{1}{m}\Big((m-1)2^n+2^{mn}\Big)\)。
- 一般情况
分圆多项式的结论可以推出 \(\displaystyle \prod_{i=0}^{m-1}(1+\omega_m^i)=2[m \text{ is odd}]\)。
以下称 \(i\) 为 \(j\)。
由于 \(j,m\) 不一定互质,记 \(d=\gcd(j,m)\),则 \(\displaystyle F(\omega_m^j)=\Big(\prod_{i=0}^{m-1}(1+\omega_{m/d}^{i\cdot(j/d)})\Big)^n\)。
令 \(j'\leftarrow \dfrac{j}{d}\),\(m'\leftarrow\dfrac{m}{d}\),\(\displaystyle\Big(\prod_{i=0}^{m-1}(1+\omega_{m'}^{ij'})\Big)^n\) 在 \(m'\) 为奇数时为 \(2^{dn}\),否则为 \(0\)。
由于 \(\displaystyle \sum_{i=0}^{m-1}\omega_{m}^{ij}\) 仍为 \(0\),计数规则不变,即 \(\displaystyle\frac{1}{m}\Big(2^{nm}+\sum_{j=1}^{m-1}F(\omega_m^j)\Big)\)。
和式即 \(\displaystyle \sum_{j=1}^{m-1}2^{d\cdot n}[\frac{m}{d}\text{ is odd}]\)(\(d=\gcd(j,m)\))。
记 \(m=2^u\cdot t\),即
时间复杂度单次 \(O(\sigma_0(t)\log V+\sqrt{V})\),\(\sigma_0(t)\) 的上界很小。
*P4191 [CTSC2010] 性能优化
给定长为 \(n\) 的多项式 \(A,B\) 和一个数 \(C\),求 \(A\times B^C\) 循环卷积的结果,对 \(n+1\) 取模。
另外地,有:
- \(n+1\) 为质数,\(n\) 能表示为若干个不超过 \(10\) 的正整数的乘积。
\(n\le 5\times 10^5\),\(C\le 10^9\),\(A_i,B_i\le 10^9\).
- Part 1
FFT 的过程如下:
求 \(A(\omega_{n}^{i}),i\in[0,n)\),奇偶拆分将其分为两个多项式 \(A_0(x),A_1(x)\) 满足 \(A(x)=A_0(x^2)+xA_1(x^2)\).
令 \(x\leftarrow \omega_{n}^{i}\):
求出了 \(i\in[0,n/2)\) 的点值,利用蝴蝶变换
不断往下分治。可以预处理处每个数最终的位置。
- Part 2
一般 FFT 分治的时候都是奇偶分类,思考其如何在模 \(p\) 意义下分治。
记初始长度为 \(pn\),接着:
求 \(A(\omega_{pn}^{i}),i\in[0,n)\),按次数模 \(p\) 分类为 \(p\) 个多项式 \(A_0(x),A_1(x),\dots,A_{p-1}(x)\),满足
令 \(x\leftarrow\omega_{pn}^{i}\):
将 \(i\) 表示为 \(\lfloor\frac{i}{n}\rfloor n+(i\operatorname{mod}n)\),改写为 \(in+r\):
固定 \(r\),即对 \(\omega_{pn}^{kr}A_k(\omega_{n}^{r})\) 做长度为 \(p\) 的 FFT,\(O(p^2)\) 暴力做。
时间复杂度 \(T(pn)=pT(n)+O(p^2n)=O(p^2n)\).
若 \(n=\prod p_i^{k_i}\),那么复杂度为 \(O(n\sum p_ik_i)\).
预处理 \(rev\) 需要干一些别的事情。
因为 \(n+1\) 为质数,令 \(\omega_{n}\leftarrow g\) 即可。
IDFT 求的是
可以先将 \(A\) 翻转,做 DFT 后除 \(n\).
\(n\) 在模 \(n+1\) 意义下的逆元为 \(-1\).
非常难贺题。
*[ARC145F] Modulo Sum of Increasing Sequences
对于 \(k\in[0,p)\) 求出满足以下条件的序列 \(A\) 的数量:
-
长度为 \(N\),值域为 \([0,M]\).
-
\(A\) 单调不降。
-
\(A\) 中元素之和模 \(p\) 余 \(k\).
答案对 \(998244353\) 取模。
\(1\le N,M\le 10^6\),\(1\le p\le 500\),\(\rm TL=4s\).
处理不降,令 \(B_i=A_i+i-1\),则 \(B\) 单调递增。
也就是在 \([0,N+M-1]\) 中选 \(N\) 个不同的数使得总和模 \(p\) 余 \(k\).
方便地,记 \(n\leftarrow N+M\).
列出 OGF:
不考虑长度为 \(N\) 的限制:
Lemma 2 - 推论
像 Lemma 2 一样处理带余数的情况可以得到:
对 \(\mathrm{ans}\) 单位根反演:
若 \(p\mid n\),记 \(d=\gcd(i,p)\),则 \(\omega_{p}^{i}\) 在 \(0\) 到 \(n-1\) 次方有纯循环节 \(p\),那么 \(\omega_{p}^{ij}=\omega_{\frac{p}{d}}^{\frac{ij}{d}}\),枚举 \(\frac{i}{d}\).
先鸽掉。