请大佬求助
T了6个点
#include<cstdio>
using namespace std;
const int maxn=1e6+10;
int k;
char s[maxn];
int kmp[maxn];
long long ans;
int main(){
scanf("%d",&k);
scanf("%s",s);
int j=0;
for (int i=1;i<k;i++){
while (j && (s[i]!=s[j])) j=kmp[j];
if (s[i]==s[j]) kmp[i+1]=++j;
}
for (int i=1;i<=k;i++){
j=i;
while (kmp[j]) j=kmp[j];
if (kmp[j]) kmp[i]=j;
ans+=i-j;
}
printf("%lld",ans);
return 0;
}
提交记录