Pagini recente » Cod sursa (job #1645873) | Cod sursa (job #2464314) | Cod sursa (job #3032672) | Cod sursa (job #3030498) | Cod sursa (job #2560801)
#include <bits/stdc++.h>
using namespace std;
ifstream fin( "prefix.in" );
ofstream fout( "prefix.out" );
const int NMAX = 1000005;
int T;
string s;
int lps[NMAX];
void Lps(){
int lg = 0;
lps[0] = 0;
for( int i = 0; i < s.size(); ++i )
lps[i] = 0;
for( int i = 1; i < s.size(); ++i )
if( s[i] == s[lg] ) lps[i] = ++lg;
else
if( lg > 0 ) {
lg = lps[lg - 1];
--i;
}
/*fout << s << '\n';
for( int i = 0; i < s.size(); ++i )
fout << lps[i] << ' ';
fout << "\n\n"; */
int lmax = 0;
for( int i = 1; i < s.size(); ++i )
if( lps[i] * 2 >= i + 1 ) {
int aux = lps[i] * 2 - i - 1;
// fout << "** " << i << ' ' << aux << "\n";
if( aux % ( lps[i] - aux ) == 0 ) lmax = i + 1;
}
fout << lmax << '\n';
}
int main()
{
fin >> T;
for( int i = 1; i <= T; ++i ) {
fin >> s;
Lps();
}
return 0;
}