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基础题总结的主要内容,如果未能解决你的问题,请参考以下文章

FFT NTT 错误总结(持续更新)

Android 面试题总结之Android 基础

2022牛客寒假算法基础集训营6 签到题5题(附基础集训营4-6签到题总结)

Android 面试题总结之Android 基础

Android 面试题总结之Android 基础

Android 面试题总结之Android 基础