Cod sursa(job #822349)

Utilizator darrenRares Buhai darren Data 23 noiembrie 2012 12:33:26
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include <algorithm>

using namespace std;

int N, M, P;
int A[10002], B[10002], S[10002];
int where[10002];

void increment(int* V)
{
    ++V[1];
    for (int i = 1; i <= V[0]; ++i)
        if (V[i] > P)
        {
            ++V[i + 1];
            V[i] -= P;
            if (i == V[0]) ++V[0];
        }
}
bool equal(int* V1, int* V2)
{
    if (V1[0] != V2[0]) return false;
    for (int i = 1; i <= V1[0]; ++i)
        if (V1[i] != V2[i])
            return false;
    return true;
}

int main()
{
    ifstream fin("nextseq.in");
    ofstream fout("nextseq.out");

    fin >> P >> N >> M;
    for (int i = 1; i <= P; ++i)
        fin >> S[i];
    for (int i = 1; i <= N; ++i)
        fin >> A[i];
    for (int i = 1; i <= M; ++i)
        fin >> B[i];

    sort(S + 1, S + P + 1);
    for (int i = 1; i <= P; ++i)
        where[S[i]] = i;
    for (int i = 1; i <= N; ++i)
        A[i] = where[A[i]];
    for (int i = 1; i <= M; ++i)
        B[i] = where[B[i]];
    A[0] = N;
    B[0] = M;
    reverse(A + 1, A + N + 1);
    reverse(B + 1, B + M + 1);

    int result = 0;
    while (!equal(A, B))
    {
        increment(A);
        ++result;
    }

    fout << result - 1 << '\n';

    fin.close();
    fout.close();
}