Cod sursa(job #2928053)

Utilizator LukyenDracea Lucian Lukyen Data 22 octombrie 2022 05:49:21
Problema Carnati Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 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());

  long long n, k;
  cin >> n >> k;

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

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

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

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

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

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

  cout << maxFin;

  return 0;
}