Cod sursa(job #468770)
| Utilizator | Data | 4 iulie 2010 22:45:13 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.5 kb |
#include <cstdio>
#include <cstring>
#define DN 1000001
void p() {
int pi[DN];
char sir[DN];
int k=0,q,lg,lmax=0;
scanf("%s", sir+1);
lg=strlen(sir+1);
for(q=2; q<=lg; q++) {
for( ;k&&sir[k+1]!=sir[q]; k=pi[k]);
if(sir[k+1]==sir[q]) ++k;
pi[q]=k;
if(k&&!(q%(q-k))) lmax=q;
}
printf("%d\n",lmax);
}
int main()
{
int t;
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
for(scanf("%d",&t ); t; --t) p();
return 0;
}
