Cod sursa(job #748578)

Utilizator IeewIordache Bogdan Ieew Data 13 mai 2012 21:07:35
Problema Prefix Scor 60
Compilator c Status done
Runda Arhiva de probleme Marime 0.83 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);
	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;
		if(v[i] == 1)
		{
			last = i;
//			fprintf(g,"last: %d\n", last);
		}
		if( v[i] && (i+1) % last ==0)
		{
			x = v[i];
			sol = i + 1;
		}
		//sol = maxim(sol, v[i]);
	}
//	for(i=0;i<n;i++)
//		fprintf(g,"%d ", v[i]);
//	fprintf(g,"\n");
//	printf("%d\n",sol);
}

int main()
{
	FILE *f = fopen("prefix.in","r");
	g = fopen("prefix.out","w");
	int i,j,t;
	fscanf(f,"%d",&t);
	for(i=0;i<t;i++)
	{
		fscanf(f,"%s",a);
		calc_sol();
		fprintf(g,"%d\n",sol);
	}
	
	fclose(f);
	fclose(g);
	return 0;
}