Cod sursa(job #1399145)

Utilizator Mr.DoomRaul Ignatus Mr.Doom Data 24 martie 2015 16:28:51
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <fstream>
#include <cstring>
using namespace std;

ifstream is("prefix.in");
ofstream os("prefix.out");

char P[1000002];
int n, m;
int s;
int p[1000002];

void Prefix();

int main()
{
	is >> n;
	for ( int i = 1; i <= n; ++i )
	{
		s = 0;
		is >> (P + 1);
		m = strlen(P + 1);
		Prefix();
		for ( int i = m; i >= 2; --i )
			if ( p[i] && (i % (i - p[i]) == 0) )
			{
				s = i;
				break;
			}
		os << s << '\n';
	}
	is.close();
	os.close();
	return 0;
}

void Prefix()
{
	int k = 0;
	for ( int i = 2; i <= m; ++i )
	{
		while ( k > 0 && P[k + 1] != P[i] )
			k = p[k];
			
		if ( P[k + 1] == P[i] )
			++k;
			
		p[i] = k;
	}
}