Cod sursa(job #170822)

Utilizator tudalexTudorica Constantin Alexandru tudalex Data 3 aprilie 2008 12:06:37
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <stdio.h>
#include <string.h>
const int n_max = 1000000;
char s[n_max];
int pi[n_max];
int i, j, sol, m, n;
inline int max(int x, int y)
{
	if (x > y)
		return x;
	return y;
}
void prefix()
{
	int k = 0;
	pi[1] = 0;
	for (int i = 2; i <= m; ++ i)
	{
		pi[i] = 0;
		while (k > 0 && s[k+1] != s[i])
			k = pi[k];
		if (s[k+1] == s[i])
			++k;
		pi[i] = k;
	}
}
int main()
{
	freopen("prefix.in","r",stdin);
	freopen("prefix.out","w",stdout);
	scanf("%d", &n);
	for (i = 1; i <= n; ++ i)
	{
		sol  = 0;
		scanf("%s", s+1);
		m = strlen(s+1);
		prefix();
		for ( j = 2; j <= m; ++ j)
			if (pi[j] > 0 && j%(j-pi[j]) == 0)
				sol =j;
		printf("%d\n", sol);
	}
	
	return 0;
}