参考文章
FFT可以在nlogn的时间内实现n次多项式F(x)和m次多项式G(x)的卷积
ck=∑i+j=kaibj=∑i=0kaibk−ic_{k}=\sum_{i+j=k}a_{i}b_{j}=\sum_{i=0}^{k}a_{i}b_{k-i}ck=∑i+j=kaibj=∑i=0kaibk−i
基本形式:
对于类似:∑i+j=N+kaibj\sum_{i+j=N+k}a_{i}b_{j}∑i+j=N+kaibj的式子,可以直接用FFT计算
例题:P3723 [AH2017/HNOI2017]礼物
直接计算卷积
经过简单的推导即可推出可以用计算卷积来解决,这类问题多形如对所有不大于n的k求出某个东西,其中k的答案为求某个卷积后结果数组的第k项。
例题:CF993E
多项式运算
多项式乘法可以用来表示卷积,而借助多项式的性质,可以分析并解决类型更为广泛的问题。其中,最典型的例子是利用生成函数解决组合计数问题,这往往可以简化推导过程,有时还可以借助专用算法优化复杂度。
字符串匹配
设s,t为字符串,其中t中某些字符是通配符,可以匹配任意字符,求s在t中的所有匹配的位置。将通配符设为0,其余字符设为非0的数,则s在k处匹配当且仅当∑0≤i<∣s∣ti+k(si−ti+k)2=0\sum_{0\leq i<|s|}t_{i+k}(s_{i}-t_{i+k})^2=0∑0≤i<∣s∣ti+k(si−ti+k)2=0
结合计算卷积,轻松算出左边的式子,完成匹配
模板题:P4173 残缺的字符串
CF528D Fuzzy Search