Cod sursa(job #1722757)

Utilizator Cristian1997Vintur Cristian Cristian1997 Data 28 iunie 2016 19:29:21
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.5 kb
using namespace std;
#include <cstdio>
#define Lmax 1000011

int p[Lmax];
char s[Lmax + 1];


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

	int t, i, k, res;

	for (scanf("%d\n", &t); t; --t)
	{
		scanf("%s\n", s + 1);

		for (res = 0, k = 0, i = 2; s[i]; ++i)
		{
			while (k > 0 && s[k + 1] != s[i]) k = p[k];
			if (s[k + 1] == s[i]) ++k;

			p[i] = k;

			if (k && k % (i - k) == 0) res = i;
		}

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

    return 0;
}