题目:
解题思路:
KMP + DP
f
[
i
]
=
f
[
n
e
x
t
[
i
]
]
+
(
i
%
2
=
=
0
)
f[i] = f[next[i]] + (i\%2 == 0)
f[i]=f[next[i]]+(i%2==0)
Accepted code:
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M = 200010;
char s[M];
int nxt[M], f[M], n, k, ans;
int main()
{
scanf("%s", s+1); n = strlen(s+1);
for(int i = 2; i <= n; ++i) {
while(k && s[k+1] != s[i]) k = nxt[k];
if(s[k+1] == s[i]) nxt[i] = ++k;
}
for(int i = 2; i <= n; ++i) {
if(i%2 == 0) f[i]++;
f[i] += f[nxt[i]];
ans += f[i];
}
printf("%d\n", ans);
return 0;
}