Cod sursa(job #2653559)

Utilizator redstonegamer22Andrei Ion redstonegamer22 Data 28 septembrie 2020 15:27:48
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;

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

string s;
string a;

unsigned int p[4000000 + 7];

void solve()
{
    p[1] = 0;

    in >> a; s = '*' + a;
    unsigned int k = 0;
    //cout << s << endl;
    for(unsigned int i = 2; i < s.size(); i++)
    {
        while(k > 0 && s[k+1] != s[i])
            k = p[k];
        if(s[k+1] == s[i])
            k++;
        p[i] = k;

        //cout << p[i] << " ";
    }
    //cout << endl;

    int maxim = 0;
    for(int period = 1; 2*period < s.size(); period++)
    {
        if(p[2*period] == period)
        {
            //cout << period << endl;
            for(int cnt_len = 2*period; cnt_len < s.size(); cnt_len+=period)
            {
                if(p[cnt_len]%period == 0 && p[cnt_len] > 0)
                {
                    maxim = max(maxim, cnt_len);
                }
                else {
                    break;
                }
            }
        }
    }

    out << maxim << endl;
}

int main()
{
    int t; in >> t;
    while(t--) solve();
}