Cod sursa(job #3200835)

Utilizator octavi26octavian octavi26 Data 5 februarie 2024 20:37:01
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <bits/stdc++.h>
#define N 1000008
#define inf 2000000001

using namespace std;

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

int n;
char s[N];
int L[N];

void Citire()
{
    fin >> s;
    n = strlen(s);
}

void Rezolvare()
{
    int i, j;
    ///Precalculare
    L[0] = 0;
    j = 0; i = 1;
    while( i <= n )
    {
        if( s[i] == s[j] ){
            L[i] = ++j;
            i++;
        }
        else{
            if( j > 0 ) j = L[j - 1];
            else L[i] = 0, i++;
        }
    }

    int lgmx = 0;
    for( i=0; i<n; i++ )
        if( (i + 1)%(i+1 - L[i]) == 0 && (i+1)/(i+1-L[i]) > 1 )
            lgmx = max( lgmx, i + 1 );
    fout << lgmx;
}

int main()
{
    int task;
    fin >> task;
    while( task-- )
    {
        Citire();
        Rezolvare();
        fout << "\n";
    }
    return 0;
}