luogu P4173 残缺的字符串(坑)

背景:

FFT的字符串假题。

题目传送门:

https://www.luogu.org/problemnew/show/P4173

题意:

定义 * 表示一个任意字符,求一个字符串从哪里开始能在模式串完全匹配。

思路:

考虑转化为数字问题。
0 0 表示 * 1 1 表示字符 a a 2 2 表示字符 b b
考虑一一对应。
那么假设两个位置匹配,就会有 a i b i = 0 |a_i-b_i|=0 a i = 0 a_i=0 b i = 0 b_i=0 ,就可以表示为: ( a i b i ) 2 a i b i = 0 (a_i-b_i)^2a_ib_i=0

展开化简得: a i 2 a i b i + b i 2 a i b i 2 a i b i a i b i = 0 a_i^2*a_ib_i+b_i^2*a_ib_i-2a_ib_i*a_ib_i=0

a i 3 b i + a i b i 3 2 a i 2 b i 2 = 0 a_i^3b_i+a_ib_i^3-2a_i^2b_i^2=0

不妨设 b b' b b 反向取后的序列,则有:
a i 3 b n i + a i b n i 3 2 a i 2 b n i 2 = 0 a_i^3b_{n-i}+a_ib_{n-i}^3-2a_i^2b_{n-i}^2=0

发现是三个 F F T FFT 卷积的形式,不妨用 F F T FFT 来加速即可。

代码:

猜你喜欢

转载自blog.csdn.net/zsyz_ZZY/article/details/85048292