FFT与字符串

Posted pupuvovovovo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFT与字符串相关的知识,希望对你有一定的参考价值。

有的题目十分毒瘤,会让我们求一个字符串中有多少满足某些性质,这个时候显然SAM等无能为力,可能需要使用FFT来进行统计(当然也有可能是乱搞)。

基本思想

以字符串匹配为例进行一些解释。

现在我们有两个字符串 (S,T) ,长度分别为 (n,m) ,求 (T)(S) 中匹配上的各个位置的起点。

首先有显然性质 (S[i,i+m)=TLeftrightarrow sum_{j=0}^{m-1}(S_{i+j}-T_j)^2=0) 。然后对每一个 (i) 都这么做:

[ sum_{i=0}^{n-m}sum_{j=0}^{m-1} (S_{i+j}-T_j)^2=sum_{i=0}^{n-m}sum_{j=0}^{m-1}(S_{i+j}^2+T_j^2+2S_{i+j}ast T_j) ]

目前这个还不是标准卷积形式,但是我们只要令 (t_i=T_{m-1-i}) ,上式就可以写成:

[ sum_{i=0}^{n-m}sum_{j=0}^{m-1}(S_{i+j}^2+t_{m-1-j}^2+2S_{i+j}ast t_{m-1-j}) ]

这就好了,可以用FFT。

例题

重复的东西就不必再写一遍了。

看CF954I。

以上是关于FFT与字符串的主要内容,如果未能解决你的问题,请参考以下文章

UVALive - 4671 K-neighbor substrings (FFT+哈希)

FFT字符串匹配

FFT字符串匹配

BZOJ4503 两个串 FFT

P4173 残缺的字符串 fft

P4173 残缺的字符串(FFT)