Pagini recente » Cod sursa (job #24642) | Cod sursa (job #2401858) | Cod sursa (job #476328) | Cod sursa (job #1888939) | Cod sursa (job #2637210)
#include <iostream>
#include <fstream>
using namespace std;
const int N = 1e6;
int lps[N]; char sir[N];
void prefix_kmp ( int n ) {
lps[0] = 0;
int i = 1, len = 0;
while ( i < n ) {
if ( sir[i] == sir[len] )
len ++, lps[i] = len, i ++;
else if ( len > 0 )
len = lps[len-1];
else
i ++;
}
}
ifstream fin ( "prefix.in" );
ofstream fout ( "prefix.out" );
int main()
{
int t;
fin >> t, fin.get ();
while ( t -- ) {
char ch = fin.get ();
int n = 0;
while ( ch != '\n' ) {
sir[n++] = ch;
ch = fin.get ();
}
prefix_kmp ( n );
int maxx = 0;
for ( int i = 0; i < n; i ++ )
if ( lps[i] > 0 && lps[i] % ( i - lps[i] + 1 ) == 0 )
maxx = i;
fout << maxx << '\n';
}
return 0;
}