Cod sursa(job #935445)

Utilizator rudarelLup Ionut rudarel Data 3 aprilie 2013 14:53:09
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <stdio.h>
#include <algorithm>
 
using namespace std;
 
const int N_MAX = 10010;
 
int X[N_MAX], A[N_MAX], B[N_MAX], poz[N_MAX];
 
int main()
{
    freopen("nextseq.in", "r", stdin);
    freopen("nextseq.out", "w", stdout);
 
    int N, M, P, x, i, j, g;
     
    scanf("%d %d %d\n", &N, &M, &P);
    for (i = 1; i <= N; i ++) {
        scanf("%d ", &X[i]);
    }
    sort(X + 1, X + N + 1);
    for (i = 1; i <= N; i ++) {
        poz[X[i]] = i;
    }
     
    for (i = M; i >= 1; i --) {
        scanf("%d ", &x);
        A[i] = poz[x];
    }
    for (i = P; i >= 1; i --) {
        scanf("%d ", &x);
        B[i] = poz[x];
    }
    sort(X + 1, X + N + 1);
 
    int nr = 0;
    while (1) {
        for (i = 1; i <= M + 1 && A[i] == N; i ++);
        A[i] ++;
        if (i == M + 1) {
            M ++;
        }
        for (j = i - 1; j >= 1; j --) {
            A[j] = 1;
        }
         
        /*for (i = 1; i <= M; i ++) {
            printf("%d ", A[i]);
        }
        printf("\n");*/
 
        g = 1;
        if (M == P) {
            int dif = 0;
            for (i = P; i >= 1; i --) {
                if (A[i] != B[i]) {
                    dif = 1;
                    if (A[i] < B[i]) {
                        nr ++;
                        break;
                    } else {
                        g = 0;
                        break;
                    }
                }
            }
            if (dif == 0) {
                g = 0;
            }
        } else {
            nr ++;
        }
 
        if (g == 0) {
            break;
        }
    }
    printf("%d\n", nr);
     
    return 0;
}