Pagini recente » Cod sursa (job #1106176) | Cod sursa (job #1323918) | Cod sursa (job #2038817) | Cod sursa (job #2479381) | Cod sursa (job #1202051)
# 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 = max( sol, i );
break;
}
//p[ i ] = 0;
}
//p[ 1 ] = 0;
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;
}
// for ( i = 1 ; i <= lg_a ; i++ )
// g << p[ i ];
// g << "\n";
}
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 );
//for ( j = lg_a ; j >= 1 ; j-- )
//a[ j ] = a[ j - 1 ];
//a[ 0 ] = ' ';
//g << a << "\n";
prefix();
rezolva();
}
}
int main()
{
citire();
return 0;
}