Mai intai trebuie sa te autentifici.
Cod sursa(job #578546)
Utilizator | Data | 11 aprilie 2011 13:02:37 | |
---|---|---|---|
Problema | Prefix | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.64 kb |
#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;
}