Cod sursa(job #1741570)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 14 august 2016 13:37:40
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <cstdio>
#define MAXN 1000000
char v[MAXN+2];
int pi[MAXN+1];
inline void Calc_Prefix(char *A,int n){
   int i,k;
   k=0;
   pi[1]=0;
   for(i=2;i<=n;i++){
      while(k>0&&A[k+1]!=A[i])
         k=pi[k];
      if(A[k+1]==A[i])
         k++;
      pi[i]=k;
   }
}
int main(){
   FILE*fi,*fout;
   int t,i,n,j,x,rez;
   char a;
   fi=fopen("prefix.in" ,"r");
   fout=fopen("prefix.out" ,"w");
   fscanf(fi,"%d " ,&t);
   while(t>0){
      t--;
      a=fgetc(fi);
      n=0;
      while(a!='\n'){
         v[++n]=a;
         a=fgetc(fi);
      }
      Calc_Prefix(v,n);
      rez=0;
      i=2;
      while(i<=n){
         if(pi[i]*2==i){
            j=i;
            x=pi[i];
            while(j<=n&&pi[j]==x){
               x++;
               j++;
            }
            x=((j-1)/pi[i])*pi[i];
            if(x>rez)
              rez=x;
            i=j;
         }
         else
           i++;
      }
      fprintf(fout,"%d\n" ,rez);
   }
   fclose(fi);
   fclose(fout);
   return 0;
}