Cod sursa(job #2698173)

Utilizator YusyBossFares Yusuf YusyBoss Data 21 ianuarie 2021 11:03:25
Problema Carnati Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <stdio.h>
#define NMAX 2000

using namespace std;

struct om {
  int T, P;
};

om v[NMAX + 1];

void mysort(int beg, int en) {
  int b, e;
  om piv, aux;

  b = beg; e = en; piv = v[(b + e) / 2];

  while (v[b].T < piv.T)
    b++;
  while (v[e].T > piv.T)
    e--;

  while (b < e) {
    aux = v[b]; v[b] = v[e]; v[e] = aux;

    do b++; while (v[b].T < piv.T);
    do e--; while (v[e].T > piv.T);
  }

  if (beg < e)
    mysort(beg, e);
  if (e + 1 < en)
    mysort(e + 1, en);
}

int maxim(int a, int b) {
  return a > b ? a : b;
}


int main() {
  FILE *fin, *fout;
  int n, c, i, maxprofit, profitcur, newprofit, pret, j, lasttime;

  fin = fopen("carnati.in", "r");
  fscanf(fin, "%d%d", &n, &c);

  for (i = 1; i <= n; i++)
    fscanf(fin, "%d%d", &v[i].T, &v[i].P);

  mysort(1, n);


  maxprofit = 0;
  for (i = 1; i <= n; i++) {
    pret = v[i].P;
    profitcur = 0;
    lasttime = -1;
    for (j = 1; j <= n; j++) {
      if (v[j].P >= pret) {
        newprofit = maxim(profitcur + pret - c * (v[j].T - lasttime), pret - c);
        lasttime = v[j].T;
        maxprofit = maxim(newprofit, maxprofit);
        profitcur = newprofit;
      }
    }
  }

  fout = fopen("carnati.out", "w");
  fprintf(fout, "%d", maxprofit);
  fclose( fout );
  return 0;
}