Pagini recente » Cod sursa (job #2573087) | Cod sursa (job #757550) | Cod sursa (job #1350882) | Cod sursa (job #2194913) | Cod sursa (job #213614)
Cod sursa(job #213614)
#include<stdio.h>
#include<string>
int max,l,q,pi[2000111],t,T,n,i;
char x,v[2000111];
int main(){
FILE *f=fopen("prefix.in","r");
FILE *g=fopen("prefix.out","w");
fscanf(f,"%d\n",&T);
for(t=1;t<=T;t++){
n=0;
memset(v,0,sizeof(v));
fscanf(f,"%s",v+1);
v[0]=' ';
n=strlen(v);
while(v[n]=='\n')
n--;
q=0;
pi[1]=0;
for(i=2;i<=n;i++){
while( q && v[q+1] != v[i] )
q=pi[q];
if(v[q+1] == v[i])
q++;
pi[i]=q;
}
max=0;
for(i=1;i<=n;i++){
l=i-1;
if(pi[i] == 1 && pi[i+l-1] ==i+l-1-l ){
if(max < i-1)
max=i+l-1;
i+=l-1;
while(pi[i] == i-l && i<=n){
max=i;
i+=l;
}
}
}
fprintf(g,"%d\n",max);
memset(pi,0,sizeof(pi));
}
fclose(f);
fclose(g);
return 0;
}