Cod sursa(job #3150948)

Utilizator Alex_BerbescuBerbescu Alexandru Alex_Berbescu Data 19 septembrie 2023 10:14:32
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("fast-math")
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
char s[1000005], a[1000005];
int n, test_cases, pi[1000005], l, maxi;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int32_t main(int argc, char * argv[])
{
    fin >> test_cases;
    while(test_cases--)
    {
        fin >> s;
        strcpy(a + 1, s);
        int n = strlen(a + 1);
        pi[1] = 0, l = 0, maxi = 0;
        for(int i = 2; i <= n; ++i)
        {
            while(l != 0 && a[i] != a[l + 1])
            {
                l = pi[l];
            }
            if(a[i] == a[l + 1])
            {
                l++;
            }
            pi[i] = l;
            if(l > 0 && i % (i - l) == 0)
            {
                if(i > maxi)
                {
                    maxi = i;
                }
            }
        }
        fout << maxi << '\n';
    }
    return 0;
}