Description
求有多少个所有形似于A+B+A的字串,且len(A)>=k,len(B)>=1。
Sample Input
aaaaa
1
Sample Output
6
枚举右端点,做kmp,然后就OK了。
感觉kmp这东西好烦啊,写代码都不是很会写,每次都要想半天。
#include <cstdio>
#include <cstring>
using namespace std;
char ss[16000], s1[16000];
int kk, len, ans, p[16000];
int main() {
scanf("%s", ss + 1);
scanf("%d", &kk);
len = strlen(ss + 1);
for(int i = 1; i <= len; i++) {
p[1] = 0;
for(int j = 2; j <= len - i + 1; j++) {
int k = p[j - 1];
while(k && ss[k + i] != ss[j + i - 1]) k = p[k];
if(ss[k + i] == ss[j + i - 1]) k++;
p[j] = k;
}
int k = 0;
for(int j = kk + 2; j <= len - i + 1; j++) {
while(k && ss[k + i] != ss[j + i - 1]) k = p[k];
if(ss[k + i] == ss[j + i - 1]) k++;
while(j - k * 2 < 1) k = p[k];
if(k >= kk && j - k * 2 >= 1) ans++;
}
}
printf("%d\n", ans);
return 0;
}