Cod sursa(job #2672916)

Utilizator cristi_macoveiMacovei Cristian cristi_macovei Data 15 noiembrie 2020 14:27:15
Problema Carnati Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <climits>

const int NMAX = 2e3;

class Client {
public:
  int time;
  int price;

  Client() = default;

  bool operator < (const Client& other) const {
    return this->time < other.time;
  }

  friend std::istream& operator >> (std::istream& is, Client& inst) {
    is >> inst.time >> inst.price;
    return is;
  }
};

int n, cost;

Client clients[1 + NMAX];

void read() {
  std::ifstream in("carnati.in");

  in >> n >> cost;

  for (int i = 1; i <= n; ++i)
    in >> clients[i];

  std::sort(clients + 1, clients + n + 1);

  in.close(); // Gata citirea
}

int main() {
  read();

  int last, last_client;
  int ans = INT32_MIN;

  for (int i = 1; i <= n; ++i) {
    last = last_client = 0;
    for (int j = 1; j <= n; ++j) {
      if (clients[i].price <= clients[j].price) {
        last = std::max(last + clients[i].price - cost * (clients[j].time - clients[last_client].time), clients[i].price - cost);
        last_client = j;
        ans = std::max(ans, last);
      }
    }
  }

  std::ofstream out("carnati.out");
  out << ans << '\n';

  out.close();
  return 0;
}