Cod sursa(job #1309623)
| Utilizator | Data | 5 ianuarie 2015 21:32:27 | |
|---|---|---|---|
| Problema | Prefix | Scor | 90 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.5 kb |
#include <cstdio>
#include <cstring>
const unsigned MAXN=1000000;
unsigned prefix[MAXN+1];
char s[MAXN+2];
int main(){
FILE *fin=fopen("prefix.in","r");
FILE *fout=fopen("prefix.out","w");
int T; fscanf(fin,"%d",&T);
while(T--){
fscanf(fin,"%s",s+1);
unsigned n=strlen(s+1);
unsigned l=0;
prefix[1]=0;
unsigned k=0;
for(unsigned i=2;i<=n;++i){
while(k>0&&s[i]!=s[k+1]) k=prefix[k];
if(s[k+1]==s[i]) k++;
prefix[i]=k;
if(k&&i%(i-k)==0) l=i;
}
fprintf(fout,"%d\n",l);
}
}
