Pagini recente » Istoria paginii utilizator/badghoul | Cod sursa (job #1400514) | Profil Tudorg | Monitorul de evaluare | Cod sursa (job #2130131)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE *fin;
FILE *fout;
char s[1000001];
int *prefix,t,lungime_cuvant,k,ln,lnmax;
fin = fopen("prefix.in","rt");
fout = fopen("prefix.out","wt");
fscanf(fin,"%d\n",&t);
for(int i=1;i<=t;i++){
fscanf(fin,"%s",s);
lungime_cuvant = strlen(s);
k=0;
prefix = (int *)calloc(lungime_cuvant,sizeof(int));
for(int j=1;j<lungime_cuvant;j++){
while(k!=0 && s[j]!=s[k])
k=*(prefix+k-1);
if(s[j] == s[k])
k++;
*(prefix+j) = k;
}
lnmax = 0;
for(int j=0;j<lungime_cuvant;j++){
k=j;
if(*(prefix+j) == 1){
while( *(prefix+j) == (*(prefix+j+1)-1) && j<lungime_cuvant) {
j++;
}
if( *(prefix+j) >= k){
ln = *(prefix+j) - *(prefix+j)%k + k;
if(ln > lnmax)
lnmax = ln;
}
}
}
fprintf(fout,"%d\n",lnmax);
free(prefix);
}
return 0;
}