#include<cstdio>
#include<cstring>
using namespace std;
char s[1000010];
long long nxt[1000010];
long long pos(long long x)
{
return nxt[x]==0?x:nxt[x]=pos(nxt[x]);
}
int main()
{
long long n,m,i,j,k,len,ans=0;
scanf("%lld",&len);
scanf("%s",s);
i=0;j=0;
nxt[0]=nxt[1]=0;
for(i=1;i<=len-1;i++)
{
while(j&&s[i]!=s[j])j=nxt[j];
if(s[i]==s[j])nxt[i+1]=++j;
else nxt[i+1]=0;
}
//for(i=0;i<=len;i++)printf("%d ",nxt[i]);
//printf("gocha\n");
for(i=len;i>=1;i--)
{
ans+=i-pos(i);
}
printf("%lld\n",ans);
return 0;
}
/*
8
babababa
*/
[Luogu P3435] OKR-Periods of Words
猜你喜欢
转载自www.cnblogs.com/Rain142857/p/11789464.html
今日推荐
周排行