Cod sursa(job #1202057)

Utilizator legionarulCorneliu Zelea Codreanu legionarul Data 26 iunie 2014 19:00:08
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
# include <fstream>
# include <algorithm>
# include <cstring>
# include <vector>

# define dim 1000005

using namespace std;

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

char a[ dim ];
int p[ dim ];
int t, lg_a;
int inc;

void rezolva()
{
	int i, sol = 0;
	for ( i = inc ; i >= 2 ; i-- )
	{
		if ( i % ( i - p[ i ] ) == 0  && p[ i ] != 0 )
		{
			sol =  i;
			break;
		}
	}
		g << sol << "\n";
}

void prefix()
{
	int i, q = 0;
	p[ 1 ] = 0;
	for ( i = 2 ; i <= lg_a ; i++ )
	{
		while ( q > 0 && a[ q + 1 ] != a[ i ] )
			q = p[ q ];
		if ( a[ q + 1 ] == a[ i ] )
			q++;
		p[ i ] = q;
		if ( p[ i ] != 0 )
			inc = i;
	}
}

void citire()
{
	int i, j;
	f >> t;
	f.get();
	for ( i = 1 ; i <= t ; i++ )
	{
		f.getline( a + 1, sizeof( a  ) + 1 );
		//scanf(" %s",( a + 1 ) );
		lg_a = strlen( a + 1 );
		prefix();
		rezolva();
	}
}

int main()
{
	citire();
	return 0;
}