Pagini recente » Cod sursa (job #1853015) | Cod sursa (job #2584479) | Cod sursa (job #1183968) | Cod sursa (job #1323019) | Cod sursa (job #1202057)
# 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;
}