1-前缀和(A)

发布时间 2023-07-12 14:20:35作者: eggome

当初想到了 kmp 的,但是没敢做……


题意:给你一个字符串,求所有长度为偶数的前缀在整个字符串中出现的次数和。

算法:p[nex[i]]+=p[i]; ans=p[x] (x mod 2 = 0)

证明可以用一种类似数学归纳法的思想:我们将第 i+1 个字符放入字符串 s{i},然后求出 nex[i+1],由于 s[1~nex[i+1]] 与 s[i-nex[i+1]+1~i] 是相等的,而且是最大匹配,所以新增的最长的前缀就只能是 s[1~nex[i+1]],如此类推,第二长的就只能是 s[1~[nex[nex[i+1]]]]……最后综合一下,也就是把填表换成刷表来提升效率,就得到了上述算法。