Cod sursa(job #2951263)

Utilizator rapidu36Victor Manz rapidu36 Data 5 decembrie 2022 19:50:05
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <cstring>

using namespace std;

const int N = 1e6;

char s[N+1];
int pref[N];

int perioada()
{
    int n = strlen(s);
    memset(pref, 0, N*sizeof(int));
    int lung = 0, rez = 0;
    for (int i = 1; i < n; i++)
    {
        while (lung > 0 && s[lung] != s[i])
        {
            lung  = pref[lung-1];
        }
        if (s[lung] == s[i])
        {
            lung++;
        }
        pref[i] = lung;
        if (pref[i] != 0 && (i + 1) % (i + 1 - pref[i]) == 0)
        {
            rez = i + 1;
        }
    }
    return rez;
}

int main()
{
    ifstream in("prefix.in");
    ofstream out("prefix.out");
    int t;
    in >> t;
    for (int i = 0; i < t; i++)
    {
        in >> s;
        out << perioada() << "\n";
    }
    in.close();
    out.close();
    return 0;
}