Cod sursă (job #357468)

Utilizator avatar FaneCelMare Steven FaneCelMare IP ascuns
Problemă Lalele (clasele 9-10) Compilator cpp | 1.85 kb
Rundă Arhiva de probleme Status evaluat
Dată 27 feb. 2018 17:33:03 Scor 100
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
using namespace std;
struct lalea {
    int h;
    int day;
};
lalea v[5000000];

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


    return 0;
}