Cod sursa(job #1499331)

Utilizator EpictetStamatin Cristian Epictet Data 10 octombrie 2015 15:10:16
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <fstream>
#include <cstring>

using namespace std;

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

int t, n, V[1000010];
char S[1000010];

void Prefix()
{
    for (int i = 1, k = 0; i < n; i++)
    {
        if (k && S[k] != S[i]) k = V[k - 1];
        if (S[k] == S[i]) k++;
        V[i] = k;
    }
}

int Solve()
{
    Prefix();
    for (int i = n - 1; i >= 0; i--)
    {
        if (V[i] && (i+1) % ((i+1) - V[i]) == 0) return i + 1;
    }
    return 0;
}

int main()
{
    fin >> t;
    while (t --)
    {
        fin.get();
        fin.get(S, 1000005, '\n');
        n = strlen(S);
        fout << Solve() << '\n';
    }

    fout.close();
    return 0;
}