Cod sursa(job #1737745)

Utilizator cristina_borzaCristina Borza cristina_borza Data 4 august 2016 17:50:28
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <algorithm>
#include <fstream>
#include <cstring>
#include <set>

#define se second
#define fi first

#define DIM 100005

using namespace std;

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

int fn[DIM] , sn[DIM] , unu[DIM] , v[DIM] , qq[DIM];
int n , m , p , x , nr , BASE;

int a[DIM] , b[DIM];

bool comp (int a[] , int b[]) {
    if (a[0] != b[0]) {
        return 0;
    }

    for (int i = 1; i <= a[0]; ++i) {
        if (a[i] != b[i]) {
            return 0;
        }
    }

    return 1;
}

void adun (int a[] , int b[]);
bool verif ();

int caut_bin(int val) {
    int i , p = 0;
    for (i = 1; i <= n; i <<= 1);
    while (i) {
        if (i + p <= n && a[i + p] <= val) {
            p += i;
        }

        i >>= 1;
    }

    return p;
}

int main() {
    unu[1] = unu[0] = 1;
    f >> n >> m >> p;

    for (int i = 1; i <= n; ++i) {
        f >> a[i];
        b[i] = a[i];
    }

    sort (a + 1 , a + n + 1);
    for (int i = 1; i <= n; ++i) {
        v[b[i]] = caut_bin(b[i]);
    }

    BASE = n + 1;
    for (int i = m; i >= 1; --i) {
        f >> x;
        fn[i] = v[x];
    }

    fn[0] = m;
    for (int i = p; i >= 1; --i) {
        f >> x;
        sn[i] = v[x];
    }

    sn[0] = p;
    while (1) {
        int ok = 0;
        for (int i = 1; i <= m && ok == 0; ++i) {
            if (fn[i] < n) {
                ok = 1;
                ++fn[i];
            }

            else {
                fn[i] = 1;
            }
        }

        if (!ok) {
            ++m;
            fn[m] = 1;
        }

        if (m < p || verif()) {
            ++nr;
        }

        else {
            break;
        }
    }

    g << nr;
    return 0;
}

bool verif () {
    for (int i = 1; i <= m; ++i) {
        if (fn[i] < sn[i]) {
            return 1;
        }
    }

    return 0;
}