Cod sursa(job #819560)

Utilizator ioanabIoana Bica ioanab Data 19 noiembrie 2012 12:07:10
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.6 kb
#include <fstream>
#include <cstring>
using namespace std;

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

const int N=1000005;
char s[N];
int pi[N];

int main()
{
	int n,m,k,i;
	bool ok;
	in>>m;
	while(m--)
	{
		in>>s+1;
		
		k=0;
		pi[1]=0;
		n=strlen(s);
		for(i=2;s[i]!='\0';i++)
		{
			while(s[k+1]!=s[i] && k>0)
				k=pi[k];
			if(s[k+1]==s[i])
				k++;
			pi[i]=k;
		}
		n=i-1;
		ok=false;
		for(i=n;i>=1;i--)
		{
			if(i%(i-pi[i])==0 && pi[i]!=0)
			{
				out<<i<<"\n";
				ok=true;
				break;
			}
		}
		if(!ok)
			out<<"0\n";
		
	}
	
	return 0;
}