Cod sursa(job #598895)
Utilizator | Paul Buda paul_gabryel | Data | 27 iunie 2011 14:39:37 |
---|---|---|---|
Problema | Prefix | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.5 kb |
#include <cstdio>
#include <fstream>
#include <cstring>
using namespace std;
int p[1000001];
char v[1000001];
int main ()
{
int t,n,m,q,i;
ifstream in ("prefix.in");
freopen ("prefix.out","w",stdout);
in>>t;
in.getline(v,1000001);
for(;t;--t){
memset(p,0,sizeof(p));
m=0;
in.getline(v,1000001);
n=strlen(v);
q=0;
for(i=1;i<n;++i){
for(;q&&v[q]!=v[i];q=p[q-1]);
if(v[q]==v[i])
++q;
p[i]=q;
if(p[i]&&!((i+1)%((i+1)-p[i])))
m=i+1;
}
printf("%d\n",m);
}
return 0;}