Cod sursa(job #2445929)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 6 august 2019 10:39:44
Problema Prefix Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <cstring>
#include <fstream>
#include <iostream>

using namespace std;

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

const int MAXN =1e6 + 5;
int Z[MAXN],n,t;
char T[MAXN];


void getZarr( )
{
    int L, R, k;

    L = R = 0;
    for (int i = 1; i < n; ++i)
    {
        if (i > R)
        {
            L = R = i;

            while (R<n && T[R-L] == T[R])
                R++;
            Z[i] = R-L;
            R--;
        }
        else
        {
            k = i-L;
           if (Z[k] < R-i+1)
                Z[i] = Z[k];

            else
            {
                L = i;
                while (R<n && T[R-L] == T[R])
                    R++;
                Z[i] = R-L;
                R--;
            }
        }
    }
}
int main() {

    fin >> t;
    for ( ; t > 0; --t) {
        fin >> (T);
        n = strlen(T);
        getZarr();
      int  ma = 0;
        for ( int i = 0; i < n; ++i) {
        if ( Z[i] >= i)
            ma = max(ma,2*i);
        }

        fout << ma << "\n";
    }
}