Cod sursa(job #305134)

Utilizator FlorianFlorian Marcu Florian Data 16 aprilie 2009 13:11:01
Problema Prefix Scor 100
Compilator cpp Status done
Runda Problemiada - Editia 2 Marime 0.59 kb
#include<cstdio>
#include<string>
using namespace std;
#define MAX_N 1000006
char s[MAX_N];
int N;
int pi[MAX_N];
void solve()
{
	int sol = 0;
	int i, k = 0;
	s[0] = '!';
	N = strlen(s) - 1;
	for(pi[1] = 0, i = 2 ; i<=N ; ++i) 
	{
		while(k && s[i] != s[k+1]) k = pi[k];
		if(s[i] == s[k+1]) ++k;
		pi[i] = k;
		if(k && i%(i-k) == 0) sol = i;
	}	
	printf("%d\n",sol);
}
int main()
{
	int T;
	freopen("prefix.in","r",stdin);
	freopen("prefix.out","w",stdout);
	scanf("%d\n",&T);
	while(T--)
	{
		memset(s,0,sizeof(s));
		scanf("%s\n",s+1);
		solve();
	}
	return 0;
}