Cod sursa(job #294906)

Utilizator EcthorIorga Dan Ecthor Data 2 aprilie 2009 20:40:38
Problema Prefix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.55 kb
#include <stdio.h>
#include <string.h>
int t;
char p[10000002];
long m;

void prefix()
{
	long k,max;
	long pre[1000002];
	pre[1]=0; max=0; k=0;
	for(long q=2;q<=m;q++)
	{
		while ( (k>0) && (p[k+1]!=p[q]) ) k=pre[k];
		if (p[k+1]==p[q]) k++;
		pre[q]=k;
		if ( (k>0) && (q%(q-k)==0) && (q>max) ) max=q;
	}
	printf("%ld",max);
}

int main()
{
	freopen("prefix.in","r",stdin);
	freopen("prefix.out","w",stdout);
	scanf("%d \n",&t);
	for(int i=1;i<=t;i++)
	{
		scanf("%s",p);
		m=strlen(p)-1;
		for(long j=m;j>=0;j++) p[j+1]=p[j];
		p[0]=' '; m++;
		prefix();
	}
}