Cod sursa(job #574983)

Utilizator Addy.Adrian Draghici Addy. Data 7 aprilie 2011 19:12:04
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.6 kb
#include <cstdio>
#include <cstring>

#define NMAX 1000050

char V[NMAX];
int pi[NMAX], lg, n, t, k, i;

int main () {
	
	freopen ("prefix.in", "r", stdin);
	freopen ("prefix.out", "w", stdout);
	
	scanf ("%d\n", &t);
	
	while (t--) {
		scanf ("%s\n", V + 1); V[0] = ' ';
		n = strlen (V) - 1; memset (pi, 0, sizeof (pi));
		
		pi[1] = 0, k = 0, lg = 0;
		for (i = 2; i <= n; i++) {
			while (k > 0 && V[k+1] != V[i])
				k = pi[k];
			
			if (V[k+1] == V[i])
				k++;
			
			pi[i] = k;
			
			if (k > 0 && !(i % (i-k))) lg = i;
		}
		
		printf ("%d\n", lg);
	}
	
	return 0;
}