poj 1961
题意:给出一个串,问你这个串的所有前缀,最多是由多少个相同的子串重复连接而成的。
代码:
#include<iostream>
#include<fstream>
using namespace std;
char c[1000005];
int next[1000004];
int len;
void get(){
int i,j,k;
j=0;k=-1;next[0]=-1;
while(j<len)
if(k==-1||c[j]==c[k])
next[++j]=++k;
else
k=next[k];
}
void read(){
// ifstream cin("in.txt");
int i,j,k=0;
while(cin>>len)
{
k++;
if(len==0) return;
cin>>c;
printf("Test case #%d\n",k);
get();
for(i=2;i<=len;i++)
if(i%(i-next[i])==0&&next[i]!=0)
cout<<i<<' '<<i/(i-next[i])<<endl;
cout<<endl;
}
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号