Cod sursa(job #3246062)

Utilizator Sasha_12454Eric Paturan Sasha_12454 Data 1 octombrie 2024 18:20:13
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>

const std :: string FILENAME = "prefix";

std :: ifstream f (FILENAME + ".in");

std :: ofstream g (FILENAME + ".out");

const int NMAX = 1e6 + 5;

int t;

int k;

bool ok;

int pi[NMAX];

std :: string s;

void prefix()
{
    for(int i = 1; i < s.size(); i ++)
    {
        int j = pi[i - 1];

        while(j > 0 && s[j] != s[i])
        {
            j = pi[j - 1];
        }

        if(s[j] == s[i])
        {
            j ++;
        }

        pi[i] = j;
    }
}

int main()
{

    f >> t;

    while(t --)
    {
        f >> s;

        prefix();

        ok = false;

        for(int i = s.size() - 1; i > 0; i --)
        {
            k = (i + 1) - pi[i];

            if(k == i + 1)
            {
                continue;
            }

            if((i + 1) % k == 0)
            {
                ok = true;

                g << i + 1 << '\n';

                break;
            }
        }

        if(ok == false)
        {
            g << 0 << '\n';
        }
    }

    return 0;
}