Cod sursa(job #931328)

Utilizator rudarelLup Ionut rudarel Data 28 martie 2013 10:14:54
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;
   }