Cod sursa(job #733593)
Utilizator | Pirtoaca George Sebastian SebiSebi | Data | 12 aprilie 2012 16:49:13 |
---|---|---|---|
Problema | Prefix | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.54 kb |
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
char c[1000001];
int v[1000001],n;
int prefix()
{
int i,q,max;
q=0;
v[1]=0;
max=0;
for(i=2;i<=n;i++) {
while((q)&&(c[i]!=c[q+1]))
q=v[q];
if(c[i]==c[q+1])
q++;
v[i]=q;
if((v[i])&&(i%(i-v[i])==0))
max=i;
}
return max;
}
int main ()
{
int t,i;
ifstream f("prefix.in");
ofstream g("prefix.out");
f>>t;
for(i=1;i<=t;i++) {
f>>c+1;
n=strlen(c+1);
c[0]=' ';
g<<prefix();
}
f.close();
g.close();
return 0;
}