Cod sursa(job #1415841)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 6 aprilie 2015 17:33:39
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include<fstream>
#include<algorithm>
using namespace std;
int n, m, p, i, nr, c, st, dr, mid, x, ok;
int a[10001], b[10001], v[10001];
ifstream fin("nextseq.in");
ofstream fout("nextseq.out");
void adunare(){
    int i = 1;
    while(a[i] == n){
        a[i] = 1;
        i++;
    }
    a[i]++;
    if(i > m){
        m = i;
    }
}
int compar(){
    if(p > m){
        return 1;
    }
    if(m > p){
        return 0;
    }
    for(i = m; i >= 1; i--){
        if(a[i] < b[i]){
            return 1;
        }
        if(a[i] > b[i]){
            return 0;
        }
    }
    return 0;
}
int main(){
    fin>> n >> m >> p;
    for(i = 1; i <= n; i++){
        fin>> v[i];
    }
    sort(v + 1, v + n + 1);
    for(i = m; i >= 1; i--){
        fin>> x;
        st = 1;
        dr = n;
        while(st <= dr){
            mid = (st + dr) / 2;
            if(v[mid] == x){
                break;
            }
            else{
                if(v[mid] < x){
                    st = mid + 1;
                }
                else{
                    dr = mid - 1;
                }
            }
        }
        a[i] = mid;
    }
    for(i = p; i >= 1; i--){
        fin>> x;
        st = 1;
        dr = n;
        while(st <= dr){
            mid = (st + dr) / 2;
            if(v[mid] == x){
                break;
            }
            else{
                if(v[mid] < x){
                    st = mid + 1;
                }
                else{
                    dr = mid - 1;
                }
            }
        }
        b[i] = mid;
    }
    ok = 1;
    nr = 0;
    while(ok){
        nr++;
        adunare();
        ok = compar();
    }
    fout<< nr - 1 <<"\n";
    return 0;
}