Cod sursa(job #352298)

Utilizator vlad.maneaVlad Manea vlad.manea Data 30 septembrie 2009 23:54:17
Problema Prefix Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <stdio.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--)
	{
		for (S[0] = ' ', N = 1, x = scanf("%c", &c); x > 0 && 'a' <= c && c <= 'z'; S[N++] = c, x = scanf("%c", &c));
		S[N] = 0;

		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;
}