51nod 1565 模糊搜索
这。。。好强啊 \(QwQ\) 思路:卷积? \(FFT\) ? 提交: \(5\) 次 错因:一开始的预处理写错了(竟然只错了最后几个大点)闹得我以为 \(FFT\) 写挂了 \(QwQ\) 题解: 对四种字符分开考虑:我们设 \(a[char][i]\) 表示在第一个串 \(s\) 中,对于 \(char \in \{'A','C','G','T'\}\) 来说 \(i\) 位置是否能模糊匹配,换言之,若 \(s[i]==char\) ,则 \(a[char][j]=1,j\in [i-k,i+k]\) 。 而对于第二个串 \(t\) 不做特殊处理,直接 \(b[char][i]=[t[i]==char]\) 。 我们在不加优化时,计算答案是 \(O(n^2)\) 的 for(R i=0;i<=lens-lent;++i) for(R j=1;j<=lent;++j) if(a[char][i+j]&&b[char][j]) ++c[i]; 最后需要统计 \(tmp=\sum [t[i]==char]\) ,若 \(c[i]==tmp\) 表示对 \(char\) 匹配成功。 所以我们要做 \(4\) 遍,对于每一个字符都做一遍。 考虑优化 \(O(n^2)\) 的过程:我们发现把 \(t\) 和 \(b\) 倒过来的话,上面的枚举相当于是一个卷积。 于是我们可以 \(FFT\