Cod sursa(job #779953)

Utilizator maritimCristian Lambru maritim Data 19 august 2012 16:29:04
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.54 kb
#include<stdio.h>
#include<fstream>
using namespace std;

ifstream f("prefix.in");
ofstream g("prefix.out");

#define MaxS 1000100

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

void citire(void)
{
	f.getline(S+1,MaxS);
}

inline int Prefix(void)
{
	int pi = 0,i;
	
	Pi[1] = 0;
	for(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;
	}
	
	for(;i;i--)
		if(Pi[i] && i%(i-Pi[i])==0)
			return i;
			
	return 0;
}

int main()
{
	f >> T; f.get();
	for(int i=1;i<=T;i++)
	{
		citire();
		g << Prefix() << "\n";
	}
}