码迷,mamicode.com
首页 > 其他好文 > 详细

FFT的应用

时间:2019-08-03 20:02:35      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:整数   翻转   推出   字符串匹配   lock   优化   spl   存在   多项式运算   

FFT的应用

概述

FFT的模板很简单,大家都会背,于是出题的空间就在于建模了。FFT的题目难在建模,往往需要将问题抽象出来,经过一系列转化后得到乘积式的和,再赋予式子各个项的系数一定的意义即可。

基本形式

对于类似\(\sum_{i+j=N+k}a_ib_j\)的式子,可以直接通过FFT计算。
其中N是定值,表示元素个数;k是变量,是题目中的系数,a和b是间接已知数组,当a与b的系数和为定值时,可将一个翻转,否则直接计算。

例题:P3723?[AH2017/HNOI2017]礼物

直接计算卷积

一些问题经过简单的推导即可推出可以用计算卷积来解决,这类问题多形如对所有不大于\(n\)\(k\)求出某个东西,其中\(k\)的答案为求某个卷积后结果数组的第\(k\)项。

例题:CF993E

给出一个大小为\(n\)的数组\(a\)和一个数\(x\),对于\(0\)\(n\)之间的所有\(k\),求有多少个\(a\)的区间中恰有\(k\)个数小于\(x\)
\(1\leq n\leq 2 \times 10^5, -10^9\leq x,ai \leq 10^9\)

多项式运算

多项式乘法可以用来表示卷积,而借助多项式的性质,可以分析并解决类型更为广泛的问题。其中,最典型的例子是利用生成函数解决组合计数问题,这往往可以简化推导过程,有时还可以借助专用算法优化复杂度。

字符串匹配

代通配符的字符串匹配

\(s,t\)为字符串,其中\(t\)中某些字符是通配符,可以匹配任意字符,求\(s\)\(t\)中的所有匹配的位置。将通配符设为\(0\),其余字符设为非\(0\)的数,则\(s\)\(k\)处匹配当且仅当
\[\sum_{0\leq i < |s|}t_{i+k}(s_i-t_{i+k})^2=0\]
结合计算卷积,很容易算出左式,即可完成匹配

模板:P4173 残缺的字符串

要求匹配两个字符串A,B,两者都有通配符

\[\sum_{0\leq i < |s|}t_{i+k}s_i(s_i-t_{i+k})^2=0\]

给出字符串\(s,t\)和非负整数\(d\),求有多少个\(k\),满足对于所有\(s\)的下标\(i\),都存在距离\(k+i\) 不大于\(d\)\(j\),使得\(s_i = t_j\)\(1\leq |s|,|t|, k\leq 2\times 10^5\),字符集大小为\(4\)

FFT的应用

标签:整数   翻转   推出   字符串匹配   lock   优化   spl   存在   多项式运算   

原文地址:https://www.cnblogs.com/guoshaoyang/p/11296027.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!