Cod sursa(job #624117)

Utilizator vlad.maneaVlad Manea vlad.manea Data 21 octombrie 2011 19:10:09
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.56 kb
#include <stdio.h>
#include <string.h>

int N, M, D, k, i, x, ans;
char c, S[1000005];
int P[1000005];

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

	scanf("%d\n", &M);
	while (M--)
	{
		S[0] = ' ';
		gets(S+1);
		N = strlen(S);

		P[1] = ans = 0;
		for (i = 2; i < N; ++i)
		{
			k = P[i-1];
			while (k > 0 && S[k+1] != S[i])
				k = P[k];

			if (S[k+1] == S[i])
				k++;

			P[i] = k;

			D = i-P[i];
			if (i % D == 0 && P[i-D] == P[i]-D || i % 2 == 0 && P[i] == i/2)
				ans = i;
		}

		printf("%d\n", ans);
	}

	return 0;
}