POJ1961Period

POJ1961

#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=1000010; char b[maxn]; int next[maxn]; void prekmp() { int j=-1;next[0]=-1; for(int i=1;b[i];++i) { while(j!=-1&&b[i]!=b[j+1]) j=next[j]; if(b[i]==b[j+1]) j++; next[i]=j; } } int main() { int n; while(scanf("%d",&n)&&n) { scanf("%s",b); prekmp(); for(int i=1;i<n;++i) { int len=i+1; next[i]++; if(len%(len-next[i])==0&&len/(len-next[i])>1) printf("%d %d\n",len,len/(len-next[i])); } } return 0; }

  

posted on 2013-09-08 23:52  Amo.  阅读(168)  评论(0)    收藏  举报

导航