「多项式」
虽然只是初涉多项式,但基本的总结还是要有滴。
概念
在我看来,多项式就是一个形如$f[x]=a_0+a_1x+a_2x^2+...+a_nx^n$的东东。
其中,x是一个“相关量”,也就是说平时我们讨论f[x]=巴拉巴拉时都是将$x^i$忽略不计的,一般来说多项式的+-*/都是对多项式的系数而言,至于$x^i$本身,更多的是一个代表的意思,代表“我是第几等级的”。
分类
多项式+-*/
(DFT)FFT,NTT,分治FFT,多项式全家桶,FWT
我学的暂时就是这些了。
应用
一般是多项式优化一些简单dp,或者用多项式结合上一些数学相关(二项式反演,斯特林数,prufer等)
习题
A. 多项式乘法
直接上FFT,NTT即可。
FFT可以三次变两次。
B. 2194: 快速傅立叶之二
试计算$C[k]=\sum(a[i]*b[i-k])$
好像是一道板子题吧,但刚学的我颓了题解+代码。
实际上只需要把b数组反转一下就办成了$C[k]=\sum(a[i]*b[n-i+k])$
最后ans[k]就是FFT后的c[n+k]咯
C. 力
刚学FFT,这题也肝了我3h(+颓代码+颓题解)
我们发现qi可以除掉(既然这样为啥要加上啊喂,搞得我以为qi是关键呢)
一个是加法部分一个是减法部分不好搞,我们可以尝试着分成两次计算。
不妨设g[x]=1/$x^2$,那么第一部分f[i]=f[j]*g[i-j](1<=j<i),似乎就是卷积了hhh
后面也是一样滴,f[i]'=f[j]*g[j-i](i<j<=n),似乎把g反转一下又成卷积了hhh
sky*嘲笑我前三道题都颓了题解+代码(话说第一题没有题解吧啊喂)
D. 3451: Tyvj1953 Normal
E. 3771: Triple
贡献分成一个斧头,两个斧头,三个斧头的贡献。
简单加减,考虑重复(不合法)即可,可以把两个多个斧头的情况看作卷积相乘,$x^i$代表这个方案的权值,系数$a_i$代表方案数
F. 3160: 万径人踪灭
考虑答案就是所有的对称方案-连续的回文的方案。
考虑a和b在一起时不好考虑,那就单独考虑a,单独考虑b好了,以单独考虑a为例,把所有有a的地方都置成1,其他的置成0,然后跑FFT,方案就是在$x^i$的位置,这两个a的对称轴就是i/2的位置,方案为$\sum2^{每个位置为中心的a和b对数}$
再减去所有的回文就好了。
G. 序列统计
选N个物品就相当于把序列自乘N次,用倍增实现。
不同的是这道题以乘积作为方案数而不是类似$x^i$中指数的加减,不符合卷积的形式。
观察到m必定是个质数,那么就一定存在原根了,把每个数转化成$G^i$的i,然后就珂以用卷积了,记得在卷积时长度是$\phi(p)-1$。
因为用的是原根,就会造成用两个🈚数的尴尬,此时一定要细心选择模数,我就这里改了一下午。
H. 求和
做这道题系统的学了学斯特林数。
$$f(n)=\sum\limits_{i=0}^{n}\sum\limits_{j=0}{i}S(i,j)*2^j*j!$$
$$f(n)=\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{i}2^j*j!*\frac{1}{j!}\sum\limits_{k=0}^{j}C_j^k(j-k)^i$$
再吧组合数拆掉,改变枚举顺序,就变成了
$$\sum\limits_{j=0}^{n}2^jj!\sum\limits_{k=0}^{j}\frac{(-1)^k}{k!}\frac{\sum\limits_{i=0}^{n}(j-k)^i}{(j-k)!}$$
因为当i<j时斯特林数为0,所以我们为了变成卷积的形式就把i的范围扩大,这也是很重要的一点,很多时候把上下界扩大可以让你豁然开朗。
然后就是裸的NTT了。
I. 染色
设f表示至少i种颜色出现了s次的方案数,g表示恰好种颜色出现了s次的方案数。
那么有
$$f_i=C_m^iC_n^{is}\frac{(is)!}{(s!)^i}(m-i)^{n-is}$$
$$f_i=\sum\limits_{j=i}^{m}C_j^ig_j$$
由二项式反演得
$$g_i=\sum\limits_{j=i}^{m}(-1)^(j-i)C_j^if_j$$
拆掉组合数,幸福法法铊。
J. 3456: 城市规划
设f表示i个点构成的无向连通图的数量
$$f_i=2^{i(i-1)/2}-\sum\limits_{j=1}^{i-1}C_{i-1}^{j-1}f_j2^{(i-j)(i-j-1)/2}$$
拆掉组合数就是分治FFT(NTT)了。
K. 5093: 图的价值
并不能推出来最普通的式子。
$$ans=n\sum\limits_{i=1}^{n-1}C_{n-1}^{i}2^{C_n^2-(n-1)}i^k$$
含义是枚举点的度数,选择度数对应的其它的点,剩下的边随便选的答案,由于n个点等价,所以×n
$$ans=n2^{C_n^2-(n-1)}\sum\limits_{i=1}^{n-1}C_{n-1}^ii^k$$
有第二类斯特林数知
$$i^k=\sum\limits_{j=0}^{k}\begin{Bmatrix}j\\ k\end{Bmatrix}i^{\underline j}$$
$$i^{\underline j}=C_i^jj!$$
那么$$ans=n2^{C_n^2-(n-1)}\sum\limits_{j=0}^{k}\sum\limits_{i=0}^{n-1}C_{n-1}^iC_i^j\begin{Bmatrix}k\\ j\end{Bmatrix}j!$$
注意到了吗,i的下界变成了0,答案却不会影响,因为0的下降幂多少都是0。
又$$C_x^iC_i^j=C_x^jC_{x-j}^{i-j}$$
含义是在x个里选i个又在i个里选j个等价于在x里选j个后又在x-j个里选出了剩下的i-j个。
要与$$\sum\limits_{i=0}^nC_{n-i}^jC_i^k=C_n^{j+k}$$分清。
原式化成了$$ans=n2^{C_n^2-(n-1)}\sum\limits_{j=0}^kC_{n-1}^jj!\begin{Bmatrix}k\\j\end{Bmatrix}\sum\limits_{i=0}^{n-1}C_{n-1-j}^{i-j}$$
$$ans=n2^{C_n^2-(n-1)}\sum\limits_{j=0}^kC_{n-1}^jj!\begin{Bmatrix}k\\j\end{Bmatrix}2^{n-1-j}$$
此时复杂度就在求第二类斯特林数上了。
n个物品,m个箱子,f是至少空,g是恰好空
$$f_i=\sum\limits_{j=i}^mC_j^ig_j$$
$$f_i=C_m^i(m-i)^n$$
那么$$g_i=\sum\limits_{j=i}^m(-1)^{j-i}C_j^if_j$$
g0就是第二类斯特林数,化简得到
$$\begin{Bmatrix}n\\m\end{Bmatrix}=\sum\limits_{j=0}^m\frac{(-1)^j}{j!}\frac{(m-j)^n}{(m-j)!}$$
NTT$klogk$求出第二类斯特林数,然后计算答案。
有个坑点就是指数是对$\phi(mod)$取模,还有$C_n^i$要递推求。
L. 遗失的答案
M. 按位或
N. 找树 / findtree
3513: [MUTC2013]idiots
给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率。N=1e5 ai=[1,1e5]
正难则反,考虑不能构成三角形的情况就是两边之和小于等于最大边,用fft整出两边之和来,取前缀和然后枚举每个最大边统计答案。
为什么这里可以直接枚举而不用考虑重复之类的情况呢?因为对每个最大边我们去两边之和小于等于它的前缀一定不会包含它自己,因为保证ai>=1。