Cod sursa(job #73811)

Utilizator floringh06Florin Ghesu floringh06 Data 21 iulie 2007 00:53:13
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#include <fstream>
#include <string.h>

using namespace std;

#define MAX_N 1000005
#define FIN "prefix.in"
#define FOUT "prefix.out"
FILE *fi,*fo;

char A[MAX_N];
int pi[MAX_N];
int T,N,BEST;


   void KMP (void)
   {
      int i,k=0;
      memset(pi,0,sizeof(pi));
      pi[1]=0;
      for (i=1; i<=N; i++)
       {
         while (k>0 && A[k]!=A[i])
           k=pi[k];
         if (A[k]==A[i]) k++;
         pi[i+1]=k; 
       }
   }      
      

   int main ()
   {
       int i,j,ok=0;     
       fi=fopen(FIN,"r");
       fo=fopen(FOUT,"w");
       fscanf(fi,"%d\n", &T); 
       for (j=1; j<=T; j++)
       {
         fgets(A,1000000,fi);  
         N=strlen(A)-2;
         KMP();             
         ok=0;
         for (i=N+1; i>1; i--)
          if (pi[i]>0 && i%(i-pi[i])==0)
           {
              fprintf(fo,"%d\n",i); ok=1;
              break;
           }           
         if (!ok) fprintf(fo,"0\n");  
       }   
       return 0;
   }