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;
}

posted on 2011-05-19 17:07  宇宙吾心  阅读(363)  评论(0)    收藏  举报

导航