Cod sursă (job #418453)

Utilizator avatar TediDinuta Dinuta Eduard Stefan TediDinuta IP ascuns
Problemă Lalele (clasele 9-10) Compilator cpp | 0,96 kb
Rundă Arhiva de probleme Status evaluat
Dată 12 ian. 2019 21:08:14 Scor 40
/**
 * Algoritm: în ziua de târg, sortăm lalelele ținând cont de ziua și înălțimea
 * în momentul plantării.
 */
#include <algorithm>
#include <stdio.h>

#define MAX_N 5000000

typedef struct {
  int d; // ziua plantării
  int h; // înălțimea la plantare
} tulip;

tulip t[MAX_N];

bool tulipCmp(tulip a, tulip b) {
  return (a.h - a.d < b.h - b.d);
}

int main(void) {
  int day, numDays, run, event;
  int n = 0;

  FILE *fin = fopen("lalele.in", "r");
  FILE *fout = fopen("lalele.out", "w");
  fscanf(fin, "%d", &numDays);

  day = 0;
  while (day < numDays) {
    fscanf(fin, "%d %d", &run, &event);
    while (run--) {
      if (event) {
        // zi normală
        t[n++] = { day, event };
      } else {
        // zi de târg
        std::sort(t, t + n, tulipCmp);
        fprintf(fout, "%d\n", day - t[n / 2].d + t[n / 2].h);
        n /= 2;
      }
      day++;
    }
  }
  fclose(fin);
  fclose(fout);
}