FFT/NTT基础题总结
Posted athosd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFT/NTT基础题总结相关的知识,希望对你有一定的参考价值。
在学各种数各种反演之前把以前做的$FFT$/$NTT$的题整理一遍
还请数论$dalao$口下留情
T1快速傅立叶之二
题目中要求求出
$c_k=sumlimits_{i=k}^{n-1}a_i*b_{i-k}$
首先可以把$a$翻转,
$c_k=sumlimits_{i=k}^{n-1}a_{n-1-i}*b_{i-k}$
$c_k=sumlimits_{i=0}^{n-k-1}a_{n-k-1-i}*b_{i}$
也就是说对新的$a$,$b$数组做一遍$FFT$得到的便是$c$数组翻转后的数组
T2力
$f[i]=sum_{j=1}^{i-1}frac{q[j]}{(i-j)^2}-sum_{j=i+1}^{n}frac{q[j]}{(i-j)^2}$
$f[i]=sum_{k=1}^{min(n-i,i-1)}frac{q[j-k]-q[j+k]}{k^2}$
构造出一个$g[i]=frac{1}{i^2}$就是一个裸的卷积了
T3Normal
因为期望的可加性,把每个点的贡献单独处理,即求期望深度
考虑$y$对$x$的贡献:当且仅当$x->y$的路径上第一个点就选$y$,$y$才能成为$x$的祖先
所以$y$对$x$的贡献就是:$P=frac{1}{dis(x,y)+1}$,$E=1$
所以最终答案就是$sumlimits_{i=1}^{n}sumlimits_{j=1}^{n}frac{1}{dis(i,j)+1}$
用点分治+$FFT$便可以$O(nlog_2^2(n))$解决
T4Triple
这道题的FFT并不难想,只是容斥比较复杂,在这里不再赘述
T5万径人踪灭
设$c[i]=sumlimits_{j=1}^{i-1}[s[i]==s[i-j]]$($s$数组从$1$开始编号)
$ans_i=2^c[i]$-不合法的个数,不合法的可以用$hash$二分
求$c[i]$可以分别考虑$a$,$b$的贡献,以a为例:设$b[i]=s[i]==‘a‘$
那么$c[i]=sumlimits_{j=1}^{i-1}b[j]*b[i-j]$,便成了卷积的形式,FFT求解即可
T6序列统计
看到乘积果断选择原根化乘法为加法,之后因为N很大,需要用快速幂+NTT
以上是关于FFT/NTT基础题总结的主要内容,如果未能解决你的问题,请参考以下文章