Cod sursa(job #3225557)

Utilizator paull122Paul Ion paull122 Data 17 aprilie 2024 22:45:13
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <cmath>
#include <cstring>


#define NMAX 1000000
#define LOG 21
#define INF (int)(10e8)
#define MOD 1000000007
#define ll  long long int


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

int pi[NMAX+1];
int z[NMAX+1];

void computeZ(string s)
{
    z[0]=0;
    int l=0,r=0;
    int n = s.size();
    for(int i=1;i<n;i++)
    {
        if(i < r)
        {
            z[i] = min(r-i,z[i-l]);
        }
        while(i+z[i] < n && s[i+z[i]]==s[z[i]])
        {
            ++z[i];
        }
        if(z[i]+i > r)
        {
            l=i;
            r=z[i]+i;
        }
    }

}

void solve()
{
    string s;
    fin >> s;
    memset(z,0,sizeof(z));
    computeZ(s);
    int res=0;

    for(int i=1;i<s.size();i++)
    {
        if(z[i]>=i)
        {
            res=max(res,i+z[i]-z[i]%i);
        }
    }
    fout << res << "\n";
}

int main()
{
    int t;
    fin >> t;
    while(t--)
    {
        solve();
    }



}