Cod sursa(job #213614)

Utilizator madmanjonesJones the one madmanjones Data 10 octombrie 2008 16:32:44
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 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;
}