Cod sursa(job #170818)

Utilizator plastikDan George Filimon plastik Data 3 aprilie 2008 11:57:39
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include <cstdio>
#include <cstring>

const int NMAX = 1000005;

int Pi[NMAX], n;
char Text[NMAX];

void prefix() {
	int i, k;
	Pi[1] = 0;
	for (i = 2, k = 0; i <= n; ++ i) {
		while (k > 0 && Text[i] != Text[k + 1])
			k = Pi[k];
		if (Text[i] == Text[k + 1])
			++ k;
		Pi[i] = k;
	}
}

int main() {
	
	freopen("prefix.in", "r", stdin);
	freopen("prefix.out", "w", stdout);
	
	int t;
	int ans, i;
	
	for (scanf("%d", &t); t > 0; -- t) {
		scanf("%s", Text + 1);
		n = strlen(Text + 1);
		prefix();
		ans = 0;
		for (i = 2; i <= n; ++ i)
			if (Pi[i] > 0 && i % (i - Pi[i]) == 0)
				ans = i;
		printf("%d\n", ans);
	}
	
	return 0;
}