Cod sursa(job #760904)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 23 iunie 2012 14:38:08
Problema Prefix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<stdio.h>
#include<string.h>
#define LMAX 1000005
char S[ LMAX ];
int L[ LMAX ], n, len, max;
FILE *f = fopen("prefix.in", "r");
FILE *g = fopen("prefix.out", "w");
void read()
{
	int i;
	fgets(S, 1000003, f);
	len = strlen(S) - 1;
	for(i = len; i; i--)
		S[i] = S[i-1];
}
void Prefix()
{
	int k = 0, i;
	[1] = 0;
	for(i = 2; i <= len; i++)
	{
		k = L[i-1];
		while(k > 0 && S[k+1] != S[i])
			k = L[k];
		if(S[k+1] == S[i])
			k++;
		L[i] = k;
	}
}
void write()
{
	int i;
	for(i = len; i; i--)
		if(L[i] && !(i % (i - L[i] ) ) )
		{
			max = i;
			break;
		}
	fprintf(g, "%d\n", max);
}
int main()
{
	fscanf(f, "%d", &n);
	fgets(S, 3, f);
	while(n)
	{
		read();
		Prefix();
		write();
		n--;
	}
	fclose(f);
	fclose(g);
	return 0;
}