Cod sursa(job #3311175)

Utilizator Lex._.Lex Guiman Lex._. Data 20 septembrie 2025 10:44:34
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>
#define NMAX 1000000
using namespace std;

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

int pi[NMAX];
int max_prefix(string s) ///lungimea prefixului periodic de lungime maxima a lui s
{
    int l_prefix=0;
    pi[0]=l_prefix;
    int max_prefix=0;
    for(int i=1; i<(int)s.size(); i++)
    {
        while(l_prefix>0 && s[l_prefix]!=s[i])
        {
            l_prefix=pi[l_prefix-1];
        }
        if(s[l_prefix]==s[i])
        {
            l_prefix++;
        }
        pi[i]=l_prefix;

        if(l_prefix!=0 && (i+1)%(i+1-l_prefix)==0)
            max_prefix=max(max_prefix, i+1);
    }
    return max_prefix;
}

int main()
{
    int t;
    in >> t;
    while(t--)
    {
        string s;
        in >> s;
        out << max_prefix(s) << "\n";
    }

    return 0;
}