Cod sursa(job #578545)

Utilizator avram_florinavram florin constantin avram_florin Data 11 aprilie 2011 13:02:37
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include<fstream>

using namespace std;

const int MaxN = 1000005;
const char InFile[] = "prefix.in";
const char OutFile[] = "prefix.out";

int T,N,sol,urm[MaxN];
char s[MaxN];

int kmp()
{
	N = strlen(s+1);
	int q,k;
	urm[1] = 0;
	k = 0;
	sol = 0;
	for( q = 2 ; q <= N ; q++ )
		{
			while( k > 0 && s[q] != s[k+1] )
				k = urm[k];
			if( s[q] == s[k+1] )
				k++;
			urm[q] = k;
			if( k && !(q%(q-k)) )
				sol = q;
		}
	return sol;
}

int main()
{
	ifstream f ( InFile );
	ofstream g ( OutFile );
	f >> T;
	while( T-- )
		{
			f >> (s+1);
			g << kmp() << '\n';
		}
	f.close();
	g.close();
	return 0;
}