Cod sursa(job #253248)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 16:37:20
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
 #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;  
}