Cod sursa(job #3038806)

Utilizator IvanAndreiIvan Andrei IvanAndrei Data 27 martie 2023 19:52:13
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <string>

using namespace std;

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

const int max_size = 1e6 + 1;

string s;
int prefix[max_size], ans;

void kmp ()
{
    int q = 0;
    for (int i = 2; i < s.size(); i++)
    {
        while (q > 0 && s[q + 1] != s[i])
        {
            q = prefix[q];
        }
        if (s[q + 1] == s[i])
        {
            q++;
        }
        prefix[i] = q;
        int sz = i - prefix[i];
        if (prefix[i] > 0 && i % sz == 0)
        {
            ans = i;
        }
    }
}

void solve ()
{
    ans = 0;
    in >> s;
    s = '$' + s;
    kmp();
    out << ans << '\n';
}

int main ()
{
    int t;
    in >> t;
    while (t--)
    {
        solve();
    }
    in.close();
    out.close();
    return 0;
}