Cod sursa(job #779735)

Utilizator crushackPopescu Silviu crushack Data 18 august 2012 17:17:49
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <stdio.h>
#include <string.h>
#define NMax 1000010
const char IN[]="prefix.in",OUT[]="prefix.out";

int Tes,N,Rez;
int P[NMax];
char A[NMax];

void prefix(){

	int i,k=0;
	P[1]=0;Rez=0;
	for (i=2;A[i]!='\n';++i)
	{
		while (k>0 && A[k+1]!=A[i])
			k=P[k];
		if (A[k+1]==A[i])
			++k;
		P[i]=k;
		if (P[i]>=i>>1 && i%(i-P[i])==0 ) Rez=i;
	}

}

int main()
{
	freopen(IN,"r",stdin);
	scanf("%d\n",&Tes);

	freopen(OUT,"w",stdout);
	while (Tes--)
	{
		fgets(A+1,NMax,stdin);
		//N=strlen(A+1)-1;
		prefix();
		printf("%d\n",Rez);
	}
	fclose(stdout);
	fclose(stdin);
	return 0;
}