Cod sursa(job #308811)

Utilizator c_e_manuEmanuel Cinca c_e_manu Data 28 aprilie 2009 17:53:46
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.58 kb
#include<fstream>
#include<cstring>
#define MaxN 1000005

using namespace std;

ifstream fin("prefix.in");
ofstream fout("prefix.out");

char A[MaxN];
int pi[MaxN],t,N;

int prefix()
{	int i,q=0,sol=0;
	for(i=2,pi[1]=0;i<=N;i++)
	{	while(q&&A[i]!=A[q+1])
			q=pi[q];
		if(A[q+1]==A[i]) q++;
		pi[i]=q;
		if(q&&i%(i-q)==0) sol=i;
	}
	return sol;
}

int main()
{	int i;
	fin>>t;fin.get();
	while(t--)
	{	fin.getline(A,MaxN);
		N=strlen(A);
		for(i=N+1;i>0;i--)A[i]=A[i-1];
		A[0]=' ';
		fout<<prefix()<<'\n';
		for(i=0;i<=N;i++) A[i]='\0';
	}
	return 0;
}