Cod sursa(job #73797)

Utilizator floringh06Florin Ghesu floringh06 Data 20 iulie 2007 22:53:16
Problema Prefix Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>
#include <fstream>

using namespace std;

#define MAX_N 1000005
#define FIN "prefix.in"
#define FOUT "prefix.out"

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=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 ()
   {
       int i,j,ok=0;
       char c='0';
       freopen(FIN,"r",stdin);
       freopen(FOUT,"w",stdout);
       scanf("%d\n", &T);  
       for (j=1; j<=T; j++)
       {
         A[0]='0'; c='0'; i=1;
         while (c!='\n')
          {
           scanf("%c",&c);
           A[i]=c; ++i;
          }
         N=i-2;
         KMP();             
    //     for (i=1; i<=N; ++i)
     //      printf("%c",A[i]);
         for (i=N; i>=1; i--)
          if (pi[i] && i%(i-pi[i])==0)
           {
              printf("%d\n",i); ok=1;
              break;
           }           
         if (!ok) printf("0\n");  
       }   
       return 0;
   }