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