Cod sursa(job #170205)

Utilizator mike4problemsRadu Gabriel mike4problems Data 2 aprilie 2008 15:16:19
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include<fstream>
#include<cstring>
using namespace std;

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

#define Max 1000001

char w[Max];
int lw,T[Max],sol,t;

void solve()
{
	int i=2,j=0,p,q;
	fin.getline(w,Max+1);
	lw=strlen(w);
	T[0]=-1;T[1]=sol=0;
	while(i<=lw)
	{
		if(w[j]==w[i-1])
		{
			T[i]=j+1;
			if(2*T[i]>=i)
				if(2*T[i]==i) sol=i;
				else
				{
					p=0,q=T[i];
					while(q<i) 
					{
						if(w[p]!=w[q]) break;
						p++,q++;
					}
					if(q==i) sol=i;
				}
			i++,j++;
		}
		else
			if(j>0) j=T[j];
			else T[i++]=0;
	}
	fout<<sol<<'\n';
}

int main()
{
	fin>>t;
	fin.getline(w,Max);
	while(t--)
		solve();
	return 0;
}