Cod sursa(job #1499360)

Utilizator EpictetStamatin Cristian Epictet Data 10 octombrie 2015 15:33:00
Problema Prefix Scor 90
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++)
    {
        if (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] > i / 2 && ((i+1) % ((i+1) - V[i])) == 0) break;
    }
    return i + 1;
}

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

    fout.close();
    return 0;
}