Cod sursa(job #163075)

Utilizator marinaMarina Horlescu marina Data 21 martie 2008 12:47:35
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
//infoarena - Prefix
#include <stdio.h>
#define INPUT "prefix.in"
#define OUTPUT "prefix.out"
#define LMAX 1000001

int N;
char A[LMAX];

int T[LMAX];

int prefix()
{
	int i, k = -1;
	T[0] = -1;
	int max = 0;
	for(i = 1; A[i]; ++i)
	{
		while(k >= 0 && A[i] != A[k+1])
			k = T[k];
		if(A[i] == A[k+1]) ++k;
		T[i] = k;
		if((T[i]>=0) && (i+1) % (i-T[i]) == 0) max = i+1;
	}
	return max;
}
int main()
{
	freopen(INPUT, "r", stdin);
	freopen(OUTPUT, "w", stdout);
	
	scanf("%d", &N);
	int i;
	for(i = 1; i <= N; ++i)
	{
		scanf("%s\n", A);
		printf("%d\n", prefix());
	}
	return 0;
}