P3435 [POI2006]OKR-Periods of Words(kmp)

#include<cstdio> #include<iostream> using namespace std; const int N=1000005; int n; long long ans; char s[N]; int nxt[N]; int main(){ scanf("%d",&n); scanf("%s",s+1); int j=0; for(int i=2;i<=n;i++){ while(j&&s[i]!=s[j+1]) j=nxt[j]; if(s[i]==s[j+1]) j++; nxt[i]=j; } for(int i=1;i<=n;i++){ j=i; while(nxt[j]) j=nxt[j]; if(nxt[i]!=0) nxt[i]=j; ans+=i-j; } printf("%lld",ans); return 0; }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章