Cod sursa(job #1304344)

Utilizator EpictetStamatin Cristian Epictet Data 28 decembrie 2014 20:53:24
Problema Prefix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include <fstream>
#include <string>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
int N, n, k, V[1000010];
string S;

void Prefix()
{
    k = 0; n = S.size();
    for (int i = 1; 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 ((i+1) % ((i+1) - V[i]) == 0 && V[i] > 0) return i + 1;
    }
}

int main()
{
    fin >> N;
    for (int i = 1; i <= N; i++)
    {
        fin >> S;
        fout << Solve() << '\n';
    }
    fout.close();
    return 0;
}