Cod sursa(job #212881)

Utilizator katakunaCazacu Alexandru katakuna Data 7 octombrie 2008 18:29:21
Problema Prefix Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<stdio.h>
#include<string>

int max,l,q,pi[1000111],t,T,n,i;
char x,v[1000111];

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;
   fscanf(f,"%s",v+1);
   n=strlen(v);
   v[0]=' ';
    /*
    fscanf(f,"%c",&x);

      while(x!='\n'){
      n++;
      v[n]=x;
      fscanf(f,"%c",&x);
      }
   */
   
   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){
            max=i;
            i+=l;
            }


         }

       }

   fprintf(g,"%d\n",max);
   }

fclose(f);
fclose(g);

return 0;
}