#include<iostream>
using namespace std;
char s[1000005];
int next[1000005];
int n,i;
void get_prefix(int len){
int k=0;
for(int p=2;p<=len;p++){
while(k>0&&s[k+1]!=s[p])
k=next[k];
if(s[k+1]==s[p])
k=k+1;
next[p]=k;
}
}
int main(){
int cases=1;
while(cin>>n&&n){
cout<<"Test case #"<<cases++<<endl;
scanf("%s",s+1);
get_prefix(n);
for(i=2;i<=n;i++){
if(i%(i-next[i])==0&&i/(i-next[i])>1)
cout<<i<<" "<<i/(i-next[i])<<endl;
}
cout<<endl;
}
return 0;
}
hdu 1358 kmp
最新推荐文章于 2020-07-12 18:26:30 发布