题目大意:
所有前缀在母串中出现的次数之和。
#include<stdio.h>
#define N 200009
int next[N];
int get_next(int len ,char *p){
int i=0,j=-1,sum=0;
next[i]=j;
while(i<len){
if(j==-1||p[i]==p[j]){
i++;
j++;
next[i]=j;
}else{
j=next[j];
}
}
for(i=1;i<=len;i++)
if(next[i]>0)
++sum;
return sum+len;
}
int main()
{
int t,n;
char buff[N];
scanf("%d",&t);
getchar();
while(t--){
scanf("%d",&n);
getchar();
gets(buff);
printf("%d\n",get_next(n,buff)%10007);
}
}