1. 程式人生 > >10.24 So many prefix?

10.24 So many prefix?

題目:

解題思路:

KMP + DP f[i]=f[next[i]]+(if[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; }