Cod sursa(job #629248)

Utilizator VladberilaVladutz Vladberila Data 2 noiembrie 2011 22:33:54
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#include <cstring>
#define NMax 1000003
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int T,i,pre[NMax];
char S[NMax];
long j,M;
int main()
{
    f>>T;
    for(i=1;i<=T;i++)
    {
         f>>S;
         M=strlen(S);
         for(j=M;j>0;j--)
            S[j]=S[j-1];
         long k=0,nr=0,pr;
         pre[1]=0;
         for(j=2;j<=M;j++)
         {
              while(k && S[k+1]!=S[j])
                  k=pre[k];
              if(S[k+1]==S[j])           
                 ++k;
              pre[j]=k;
              pr=j-pre[j];
              if(j%2==0 && pre[j]==j/2 || j%pr==0 && pre[j-pr]==pre[j]-pr)
                 nr=j;
         }
         g<<nr<<'\n';
    }
    f.close();
    g.close();
    return 0;
}