题意:跟poj 2406差不多
思路:KMP的 len%(len-next[len])应用 ,不过这次要从2到len循环 判断,然后一次输出。。
#include<iostream>
using namespace std;
int next[1000010];
char s[1000010];
int n;
void get_next()
{
int j=0,k=-1;
next[0]=-1;
while(j<n)
{
if(k==-1||s[k]==s[j])
{
next[j+1]=k+1;
j++;k++;
}
else
k=next[k];
}
return ;
}
int main()
{
int t=1;
while(scanf("%d",&n)!=EOF&&n)
{
for(int i=0;i<n;i++)
cin>>s[i];
printf("Test case #%d\n",t++);
get_next();
for(int j=2;j<=n;j++)
{
if(j%(j-next[j])==0)
{
int cnt=j/(j-next[j]);
if(cnt>1)
printf("%d %d\n",j,cnt);
}
}
printf("\n");
}
}