虽然只是初涉多项式,但基本的总结还是要有滴。
概念
在我看来,多项式就是一个形如$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$。
因为用的是原根,就会造成用两个