Pagini recente » Cod sursa (job #885778) | Cod sursa (job #1326692) | Rating tudor vlad (tudorvlad) | Cod sursa (job #2281641) | Cod sursa (job #578547)
Cod sursa(job #578547)
#include<fstream>
using namespace std;
const int MaxN = 1000005;
const char InFile[] = "prefix.in";
const char OutFile[] = "prefix.out";
int T,N,sol,urm[MaxN];
char s[MaxN];
int kmp()
{
N = strlen(s+1);
int q,k;
urm[1] = 0;
k = 0;
sol = 0;
for( q = 2 ; q <= N ; q++ )
{
while( k > 0 && s[q] != s[k+1] )
k = urm[k];
if( s[q] == s[k+1] )
k++;
urm[q] = k;
if( k && !(q%(q-k)) )
sol = q;
}
return sol;
}
int main()
{
ifstream f ( InFile );
ofstream g ( OutFile );
f >> T;
while( T-- )
{
f >> (s+1);
g << kmp() << '\n';
}
f.close();
g.close();
return 0;
}