Cod sursa(job #5187)

Utilizator m_dersidanDersidan Mihai m_dersidan Data 10 ianuarie 2007 21:02:56
Problema Prefix Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
# include <stdio.h>
# include <string.h>

# define  fin  "prefix.in"
# define  fout "prefix.out"

# define  maxn 100100


char a[maxn];
int p[maxn], l, sol;


void prefix()
{
	int k=0, q;
	
	for (q=2; q<=l; q++)
	{
		while ( k>0 && a[k+1] != a[q] ) k = p[k];
		if ( a[k+1] == a[q] ) ++k;
		p[q] = k;
	}
}

void solve()
{
	memset(p,0,sizeof(p));
	prefix();
	
	int i;
	
	for (sol=0, i=1; i<=l; i++)
		if ( p[i] > 0 && i % ( i-p[i] ) == 0 ) sol = i;
}

int main()
{
	freopen(fin, "r", stdin);
	freopen(fout, "w", stdout);
	
	int t;

# define  cut(a) ( a[ strlen(a)-1 ] == '\n' ? a[ strlen(a)-1 ] = 0 : (0) )
	
	for (scanf("%d\n", &t); t; --t)
	{
		gets(a+1), cut(a), a[0]=0x30;
		l = strlen(a);
		solve();
		
		printf("%d\n", sol);
	}
	
	return 0;
}