Cod sursa(job #679534)

Utilizator eukristianCristian L. eukristian Data 13 februarie 2012 13:46:07
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#include <cstring>
#define sz 1000002

char P[sz];
int prefixFunc[sz], T;

void computePF(int len);

int main()
{
	freopen("prefix.in", "r", stdin);
	freopen("prefix.out", "w", stdout);
	
	scanf("%d\n", &T); 
	
	for (int i = 1 ; i <= T ; ++i)
	{
		gets(P + 1);
		int len = strlen(P + 1);
		
		computePF(len);
		
		bool ok = false;
		for (int i = len ; i > 1 ; --i)
		{
			if (prefixFunc[i] > 0 && i % (i - prefixFunc[i]) == 0)
			{
				printf("%d\n", i);
				ok = true;
				break;
			}
		}
		
		if (ok == false)
		{
			printf("0\n");
		}
	}
	
	return 0;
}

void computePF(int len)
{
	int k = 0;
	prefixFunc[1] = 0;
	
	for (int q = 2 ; q <= len ; ++q)
	{
		while (k > 0 && P[k + 1] != P[q])
			k = prefixFunc[k];
			
		if (P[k + 1] == P[q])
			k++;
			
		prefixFunc[q] = k;
	}
}