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; }
浙公网安备 33010602011771号