Cod sursa(job #2034984)

Utilizator Andrei_CotorAndrei Cotor Andrei_Cotor Data 8 octombrie 2017 19:16:48
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<fstream>
#include<string.h>
using namespace std;
ifstream fi("prefix.in");
ofstream fo("prefix.out");
int t,T,n,rez,i,k,l,S[1000002];
char C[1000002];
int main()
{
    fi>>T;
    for(t=1; t<=T; t++)
    {
        fi>>C+1;
        n=strlen(C+1);
        S[0]=-1;
        S[1]=0;
        rez=0;
        for(i=2; i<=n; i++)
        {
            k=i-1;
            while(S[k]!=-1 && C[S[k]+1]!=C[i])
                k=S[k];
            if(S[k]==-1)
                S[i]=0;
            else
                S[i]=S[k]+1;
            //calculez lungimea perioadei
            l=i-S[i];
            if(i%l==0 && l!=i)
            {
                rez=i;
            }
        }
        fo<<rez<<"\n";
    }
    fi.close();
    fo.close();
    return 0;
}