Cod sursa(job #2097426)

Utilizator mihailrazMihail Turcan mihailraz Data 31 decembrie 2017 13:13:57
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
#define LMAX 1000000

using namespace std;
ifstream fi("prefix.in");
ofstream fo("prefix.out");
char C[LMAX+5];
int t,m,rez;
int LPS[LMAX+5];

void construire_lps(char P[])
{
    for(int i=1, j=0; i<m; )
    {
        if(P[i]==P[j])
        {
            LPS[i]=j+1;
            i++;
            j++;
        }
        else
        {
            if(j==0)
            {
                LPS[i]=0;
                i++;
            }
            else
                j=LPS[j-1];
        }
    }
}

int main()
{
    fi>>t;
    while(t--)
    {
        fi>>C;
        m=strlen(C);
        construire_lps(C);
        rez=0;
        for(int i=m-1; i>=1; i--)
            if(LPS[i]!=0 && (i+1)%(i+1-LPS[i])==0)
            {
                rez=i+1;
                break;
            }
        fo<<rez<<"\n";
    }
    fi.close();
    fo.close();
    return 0;
}