#include <iostream>
using namespace std;
char a[1000001],nex[1000001];
int n;
void get_nextval(){
int j=1,k=0;
nex[1]=0;
while(j<=n)
{
if(k==0||a[j]==a[k])
{
if(j%(j-k)==0 && j/(j-k)>1) printf("%d %d\n",j,j/(j-k));
j++;k++;
if(a[k]!=a[j]) nex[j]=k;
else nex[j]=nex[k];
}
else k=nex[k];
}
}
int main(){
int j=0;
while(cin>>n&&n){
memset(a,'\0',sizeof(a));
memset(nex,0,sizeof(nex));
getchar();
for(int i=1;i<=n;i++) scanf("%c",&a[i]);
j++;
printf("Test case #%d\n",j);
get_nextval();
printf("\n");
}
return 0;
system("pause");
}
poj 1961 Period (KMP)
最新推荐文章于 2019-10-01 23:15:42 发布