Cod sursa(job #748588)

Utilizator IeewIordache Bogdan Ieew Data 13 mai 2012 21:22:52
Problema Prefix Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <stdio.h>
#include <string.h>
#define NMAX 1000004
char a[NMAX];
int sol;
FILE *g;
inline int maxim(int a, int b)
{	return a>=b?a:b;}

void calc_sol()
{
	int v[NMAX];
	int i,j=0, n = strlen(a);
	a[--n]= 0;
	v[0] = 0;
	sol = 0;
	int x =0;
	int last = 1;
	for(i=1;i<n;i++)
	{
		while(j && a[j] != a[i])
			j = v[j-1];
		if(a[j] == a[i])
			++j;
		v[i] = j;
	}
	
	for(i=n-1;i;--i)
		if(v[i] && !((i+1) % (i+1 - v[i])))
		{
			sol = i+1;
			break;
		}
//	for(i=0;i<n;i++)
//		printf("%d ", v[i]);
//	printf("\n");
//	printf("%d\n",sol);
}

int main()
{
	freopen("prefix.in","r",stdin);
	freopen("prefix.out","w",stdout);
	int i,j,t;
	scanf("%d",&t);
	fgets(a,sizeof(a), stdin);
	for(i=0;i<t;i++)
	{
		fgets(a,sizeof(a), stdin);
		calc_sol();
		printf("%d\n",sol);
	}

	return 0;
}