제출 #1163684

#제출 시각아이디문제언어결과실행 시간메모리
1163684avighnaFuel Station (NOI20_fuelstation)C++20
100 / 100
170 ms21556 KiB
#include <bits/stdc++.h>

typedef long long ll;

int main() {
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(nullptr);

  ll n, d;
  std::cin >> n >> d;
  struct Station {
    ll x, a, b;
  };
  std::vector<Station> a(n);
  std::set<ll> b_vals;
  for (auto &i : a) {
    std::cin >> i.x >> i.a >> i.b;
    b_vals.insert(i.b);
  }
  std::sort(a.begin(), a.end(), [](Station a, Station b) { return a.x < b.x; });

  auto f = [&](ll F) {
    ll fuel = 0, pos = 0, ans = F;
    for (ll i = 0; i < n; ++i) {
      fuel -= a[i].x - pos;
      ans = std::min(ans, fuel);
      fuel += a[i].a * (F <= a[i].b);
      pos = a[i].x;
    }
    return -std::min(ans, fuel - (d - pos));
  };

  ll ans = d, prev = 0;
  // fix the number of activated stations
  for (auto &b : b_vals) {
    if (b < prev) {
      continue;
    }
    ll val = f(b);
    if (val <= b) {
      ans = val;
      break;
    }
    prev = val;
  }
  std::cout << ans << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...