Cod sursa(job #540779)
Utilizator | Data | 24 februarie 2011 13:18:46 | |
---|---|---|---|
Problema | Prefix | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.48 kb |
#include<fstream.h>
ifstream f("prefix.in");
ofstream g("prefix.out");
char s[1000002],c;
int n,t,l[1000002];
void kmp()
{ int i,j,m=0;
j=0;
for(i=2;i<=n;i++)
{while(j>0&&s[j+1]!=s[i]) j=l[j];
if(s[i]==s[j+1]) j++;
l[i]=j;
if(j && i%(i-j)==0)m=i;
}
g<<m<<'\n';
}
int main()
{ int k;
f>>t>>c;
s[0]='0';
for(k=0;k<t;k++){
f.getline(s+1,1000001);
n=strlen(s)-1;
kmp();
}
f.close(); g.close();
return 0;
}