Cod sursa(job #1325037)

Utilizator ArmandNMArmand Nicolicioiu ArmandNM Data 23 ianuarie 2015 09:49:41
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <algorithm>

const int NMAX = 10005;

using namespace std;
ifstream f("nextseq.in");
ofstream g("nextseq.out");

int N,M,P,X[NMAX],A[NMAX],B[NMAX],pos[NMAX],answer;

void increment(int* V)
{
    V[1]++;
    for (int i = 1; i <= V[0]; ++i)
    {
        if (V[i] > N)
        {
            V[i+1]++;
            V[i] = 1;
            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()
{
    f >> N >> M >> P;
    for (int i = 1; i <= N; ++i)
        f >> X[i];
    for (int i = 1; i <= M; ++i)
        f >> A[i];
    for (int i = 1; i <= P; ++i)
        f >> B[i];

    sort(X+1,X+N+1);

    for (int i = 1; i <= N; ++i)
        pos[X[i]] = i;
    for (int i = 1; i <= M; ++i)
        A[i] = pos[A[i]];
    for (int i = 1; i <= P; ++i)
        B[i] = pos[B[i]];

    reverse(A+1,A+M+1);
    reverse(B+1,B+P+1);
    A[0] = M;
    B[0] = P;

    while(!equal(A,B))
    {
        increment(A);
        answer++;
    }

    g << answer-1;

    f.close();
    g.close();
    return 0;
}