Cod sursa(job #3250676)

Utilizator SSKMFSS KMF SSKMF Data 22 octombrie 2024 22:13:43
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <cstring>
using namespace std;

ifstream cin ("prefix.in");
ofstream cout ("prefix.out");

int prefix[1000001];
char sir[1000001];

int main ()
{
    ios :: sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    int numar_teste;
    cin >> numar_teste;
    while (numar_teste--)
    {
        cin >> sir;

        int lungime = (int)strlen(sir) , maxim = 0;
        for (int indice = 1 , lungime_actuala = 0 ; indice < lungime ; indice++)
        {
            while (lungime_actuala && sir[lungime_actuala] != sir[indice])
                { lungime_actuala = prefix[lungime_actuala - 1]; }
        
            lungime_actuala += (sir[lungime_actuala] == sir[indice] ? 1 : 0);
            prefix[indice] = lungime_actuala;
            
            if (lungime_actuala && (indice + 1) % (indice - lungime_actuala + 1) == 0)
                { maxim = indice + 1; }
        }
        
        cout << maxim << '\n';
    }

    return 0;
}