Cod sursă (job #357004)

Utilizator avatar FaneCelMare Steven FaneCelMare IP ascuns
Problemă Lalele (clasele 9-10) Compilator cpp | 1,77 kb
Rundă Arhiva de probleme Status evaluat
Dată 26 feb. 2018 21:57:51 Scor 100
#include <fstream>
#include <vector>
#include <time.h>
#include <stdlib.h>
using namespace std;
struct lalea{
    int h;
    int day;
};

lalea v[5000000];
int size = 0;

int main()
{
    srand(time(NULL));
    int n, d, x, i, cd, j, days, st, dr, p;
    lalea l;
    FILE* in = fopen("lalele.in", "r");
    FILE* out = fopen("lalele.out", "w");
    fscanf(in, "%d", &n);
    days = 0;
    while (n > 0) {
        fscanf(in, "%d", &d);
        fscanf(in, "%d", &x);
        cd = d;
        if (x > 0) {
            while (d > 0) {
                l.day = days;
                l.h = x;
                days++;
                d--;
                v[size++] = l;
            }
        } else {
            while (d > 0) {
                st = 0;
                dr = size - 1;
                do {
                    p = st + (rand() % (dr - st + 1));
//                    p = (st * 3 + dr) / 4;
                    swap(v[dr], v[p]);
                    l = v[dr];
                    p = st;
                    for (i = st; i < dr; i++) {
                        if (v[i].h - v[i].day < l.h - l.day) {
                            swap(v[i], v[p]);
                            p++;
                        }
                    }
                    v[dr] = v[p];
                    v[p] = l;
                    if (p > size / 2) {
                        dr = p - 1;
                    } else {
                        st = p + 1;
                    }
                } while (p != size/2);

                x = v[p].h + days - v[p].day;
                fprintf(out, "%d\n", x);
                size /= 2;
                d--;
                days++;
            }
        }
        n -= cd;
    }

    fclose(out);

    return 0;
}