Cod sursa(job #791971)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 25 septembrie 2012 22:29:54
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.59 kb
#include <fstream>
#define NMAx 1000100
using namespace std;

char S[NMAx];
int T,Fail[NMAx];

int Solve() {
	
	int i,e;
	
	Fail[1]=0;
	for(i=2,e=0;S[i];i++) {
		
		while(e && S[e+1]!=S[i])
			e=Fail[e];
		
		if(S[e+1]==S[i])
			++e;
		
		Fail[i]=e;
		
		}
	
	for(i--;i;i--)
		if(Fail[i] && i%(i-Fail[i])==0)
			return i;
		
	return 0;
	
}
int main() {
	
	ifstream in("prefix.in");
	ofstream out("prefix.out");
	
	in>>T;
	in.getline(S,1);
	
	while(T--) {
		
		in.getline(S+1,NMAx);
		out<<Solve()<<'\n';
		
		}
	
	in.close();
	out.close();
	
	return 0;
	
}