Cod sursa(job #2928055)

Utilizator LukyenDracea Lucian Lukyen Data 22 octombrie 2022 05:51:49
Problema Carnati Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("carnati.in");
ofstream fout("carnati.out");

int main()
{
  cin.rdbuf(fin.rdbuf());
  cout.rdbuf(fout.rdbuf());

  int n, k;
  cin >> n >> k;

  vector<pair<int, int>> vec(n + 1);
  for (int i = 1; i <= n; i++)
  {
    int x1, x2;
    cin >> x1 >> x2;
    vec[i] = make_pair(x1, x2);
  }

  sort(vec.begin() + 1, vec.end());

  int maxFin = 0;
  for (int i = 1; i <= n; i++)
  {
    int maxPrice = vec[i].second;
    pair<int, int> best{0, 0};
    int j;
    for (j = 1; j <= n; j++)
      if (vec[j].second >= maxPrice)
      {
        best = make_pair(vec[j].first, maxPrice);
        break;
      }

    for (j = j + 1; j <= n; j++)
      if (vec[j].second >= maxPrice)
      {
        int nextOption = maxPrice - (vec[j].first - best.first) * k;

        if (nextOption + best.second < maxPrice && nextOption > 0)
          best = make_pair(vec[j].first, maxPrice);
        else if (nextOption > 0)
          best = make_pair(vec[j].first, best.second + nextOption);
      }

    if (best.second > maxFin)
      maxFin = best.second;
  }

  cout << maxFin;

  return 0;
}