Cod sursa(job #2916051)

Utilizator raul41917raul rotar raul41917 Data 27 iulie 2022 22:43:35
Problema Prefix Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <fstream>
#include <cstring>
#define LMAX 1000005
using namespace std;
ifstream fi("prefix.in");
ofstream fo("prefix.out");
int T;
int LPS[LMAX];
void Solve(char txt[],int &S)
{
    S=0;
    bool var=false;
    int len=0;
    LPS[0]=0;
    int i=1;
    int inQ;
    while(i<strlen(txt))
    {
        if(txt[i]==txt[len])
        {
            len++;
            LPS[i]=len;
            if(var==false)
            {
                if(len*2==i+1)
                {
                    var=true;
                    inQ=len;
                }
            }if(var==true)
            {
                if((i+1)%inQ==0)
                    S=i+1;
            }
            i++;
        }else
        {
            var=false;
            if(len!=0)
                len=LPS[len-1];
            else
            {
                LPS[i]=0;
                i++;
            }
        }
    }
}
int main()
{
    fi>>T;
    for(int test=1;test<=T;test++)
    {
        char txt[LMAX];
        fi>>txt;
        int S;
        Solve(txt,S);
        fo<<S<<"\n";
    }
    return 0;
}