Cod sursa(job #855853)

Utilizator veleanduAlex Velea veleandu Data 15 ianuarie 2013 18:32:50
Problema Prefix Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>
#include <cstring>


#include <iostream>

using namespace std;

	#define max_n 1000005

string Pattern;
int Prefix[ max_n ];
int Number;
int n;

void solve (){
	Prefix[ 0 ] = Prefix[ 1 ] = 0 ;
	int k=0;
	for ( int i=2; i<=n; ++i ){
    	while ( ( k ) && ( Pattern[ k+1 ] != Pattern[ i ] ) )
			k = Prefix[k];
		if ( Pattern[ k+1 ] == Pattern[ i ] )
			k++;
		Prefix[ i ] = k;
	}

	for ( int i=n; i>0; --i ){
		if ( ( Prefix[ i ] ) && !( i % ( i-Prefix[ i ] ) ) ){
			cout<<i<<"\n";
			return ;
		}
	}               
	cout<<"0\n";
	return ;
}

void read (){
	cin>>Number;
	while ( Number ) {
        cin>>Pattern;
		n = Pattern.length();
		Pattern = " " + Pattern;
		solve();

		Number--;
	}
}


int main(){

    freopen ("prefix.in","r",stdin);
	freopen ("prefix.out","w",stdout);
	
	read ();

	return 0;
}