Cod sursa(job #1499370)

Utilizator EpictetStamatin Cristian Epictet Data 10 octombrie 2015 15:42:19
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 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++)
    {
        while (k && S[k] != S[i]) k = V[k - 1];
        if (S[k] == S[i]) k++;
        V[i] = k;
    }
}

int Solve()
{
    Prefix();
    int i;
    for (i = n - 1; i > 0; i--)
    {
        if ((V[i] > 0) && ((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;
}