Cod sursa(job #214066)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 12 octombrie 2008 15:22:25
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#define MAX 2001000

using namespace std;

ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
char s[MAX];
int n;
int pp[MAX];
int mx=0;
int nr;

inline int maxim(int a,int b)
{
     return a>b?a:b;
}

void pmk()
{
     pp[1]=0;
     int num=0;
     for (int i=2;i<=n;i++)
     {
          while (num && s[num+1]!=s[i])
               num=pp[num];
          if (s[num+1]==s[i])
               num++;
          pp[i]=num;
     }
}

void afish()
{
     int p;
     for(int i=1;i<=n;i++)
     {
       p=i-1;
         if(pp[i]==1 && pp[i+p-1]==i-1)
         {
            if(mx<i-1)
               mx=i+p-1;
            i+=p-1;
            while(pp[i] == i-p && i<=n)
            {
               mx=i;
               i+=p;
            }
         }
       }
     fout<<mx<<"\n";
}

void citire()
{
     int t;
     fin>>t;
     fin.getline(s,MAX);
     for (int i=0;i<t;i++)
     {
          fin.getline(s+1,MAX);
          if (s[strlen(s)-1]=='\n')
               s[strlen(s)-1]=0;
          n=strlen((s+1));
          mx=0;
          pmk();
          afish();
          memset(s,0,sizeof(s));
     }
}

int main ()
{
     citire();
     return 0;
}