Cod sursa(job #699583)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 29 februarie 2012 20:16:08
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.52 kb
#include<stdio.h>
#include<string.h>
#define Nmax 1000009

int n,t,i,q,phi[Nmax];
char s[1000009];

int prefix()
{
	q=0;
	for (int i=1;i<n;i++)
	{
		while (q && s[i]!=s[q]) q=phi[q-1];
		if (s[i]==s[q]) q++;
		phi[i]=q;
	}
	for (int i=n;i;i--)
		if (phi[i] && (i+1)%(i+1-phi[i])==0) return i+1;
	return 0;
}


int main()
{
	freopen("prefix.in","r",stdin);
	freopen("prefix.out","w",stdout);
	
	scanf("%d\n",&t);
	
	for (i=1;i<=t;i++)
	{
		gets(s);
		n=strlen(s);
		printf("%d\n",prefix());
	}
}