Cod sursa(job #2056583)

Utilizator Cristian.BBurghelea Cristian Cristian.B Data 4 noiembrie 2017 12:24:50
Problema Prefix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

ifstream fin ("prefix.in");
ofstream fout ("prefix.out");

#define NMax 2000005

int i,q=0,pi[NMax],M,N,n,pos[NMax],imax,t;
char A[NMax],B[NMax];

void prefix()
{
 int i; q=0;
    for(i=2,pi[1]=0;i<=M;++i)
    {
        while(q&&A[q+1]!=A[i])q=pi[q];
        if(A[q+1]==A[i])++q;
        pi[i]=q;
        if(q && i%(i-q)==0) imax=i;
    }
}

int main()
{
    fin>>t;
    while(t)
    {
    fin.getline(A,NMax);
   // fin.getline(B,NMax);
    M=strlen(A);
    //N=strlen(B);

    for(i=M;i;--i) A[i]=A[i-1];A[0]=' ';
    //for(i=N;i;--i) B[i]=B[i-1];B[0]=' ';

    prefix();
    /*q=0;
    for(i=1;i<=N;++i)
    {
       while(q&&A[q+1]!=B[i]) q=pi[q];
       if(A[q+1]==B[i])++q;
       if(q==M)
        {
         q=pi[M];
         ++n;
         pos[n]=i-M;
        }
    }
    fout<<n<<'\n';
    if(n>1000)n=1000;
    for(i=1;i<=n;++i)fout<<pos[i]<<' ';
    fout<<'\n';*/
    fout<<imax<<'\n';
    --t;
    A[0]=' ';
    }


    fin.close(); fout.close();
    return 0;
}