Cod sursa(job #36290)

Utilizator damaDamaschin Mihai dama Data 23 martie 2007 12:43:38
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>
#include <string.h>


char line[1048576], p[1048576]; 
int n, pi[1048576], t;

void prefix();

int main()
{
	freopen("prefix.in","r",stdin);
	freopen("prefix.out","w",stdout);

	scanf("%d ", &t);

	int test, i, ok, k, len;

	for(test = 0; test < t; ++test)
	{
		gets(line);
		scanf(" ");
		for(i = 1; i <= n; ++i)
			pi[i] = 0;
		n = 0;
		len = strlen(line);
		for(i = 0; i < len; ++i)
		{
			if(line[i] <= 'z' && line[i] >= 'a')
			{
				p[++n] = line[i];
			}
		}
		k = 0;
		for(i = 2; i <= n; ++i)
		{
			while(p[k + 1] != p[i] && k)
				k = pi[k];
			if(p[k + 1] == p[i])
				++k;
			pi[i] = k;
		}
		ok = 0;
		for(i = n; i > 0; --i)
		{
			if(pi[i] && i % (i - pi[i]) == 0)
			{
				printf("%d\n", i);
				ok = 1;
				break;
			}
		}
		if(!ok)
			printf("0\n");
	}


	return 0;
}