Cod sursa(job #779946)

Utilizator maritimCristian Lambru maritim Data 19 august 2012 16:16:35
Problema Prefix Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.56 kb
#include<stdio.h>

FILE *f = fopen("prefix.in","r");
FILE *g = fopen("prefix.out","w");

#define MaxS 1000100

int T;
int Pi[MaxS];
char S[MaxS];

void citire(void)
{
	fgets(S+1,sizeof(S),f);
}

inline int Prefix(void)
{
	int pi = 0,Sol = 0;
	
	Pi[1] = 0;
	for(int i=2;S[i];i++)
	{
		for(;S[pi+1] != S[i] && pi;pi = Pi[pi]);
		if(S[pi+1] == S[i]) ++ pi;
		
		Pi[i] = pi;
		
		if(Pi[i] >= (i>>1))
			if(1.00*i/(i-Pi[i]) == i/(i-Pi[i]))
				Sol = i;
	}
	
	return Sol;
}

int main()
{
	fscanf(f,"%d\n",&T);
	for(int i=1;i<=T;i++)
	{
		citire();
		fprintf(g,"%d\n",Prefix());
	}
}