Period HDU - 1358
题意&&思路:
基本和uva那道eg题一模一样。
Period UVA - 1328
AC
#include <iostream>
#include <cstring>
using namespace std;
const int maxm=1e6+10;
char p[maxm];
int m, nxt[maxm];
void getnxt(){
int i=0, j=-1;
nxt[0]=-1;
while(i<m){
if(j==-1||p[i]==p[j])nxt[++i]=++j;
else j=nxt[j];
}
}
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int kase=0;
while(cin>>m&&m){
cin>>p;
getnxt();
cout<<"Test case #"<<++kase<<endl;//1"
for(int i=2; i<=m; i++){
if(nxt[i]>0 && i%(i-nxt[i])==0)cout<<i<<' '<<i/(i-nxt[i])<<endl;
}
cout<<endl;
}
return 0;
}