Submission #1309504

#TimeUsernameProblemLanguageResultExecution timeMemory
1309504haught_veathFuel Station (NOI20_fuelstation)C++20
0 / 100
3094 ms8260 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e6;
const int inf = 1e18;
int dp[maxn];
struct information{
  int x,f,r;
  bool operator <(const information a)const {
    return x < a.x;
  }
};
int n,h;
vector<information> a;
bool check(int x){
    dp[0] = x;
    for(int i = 1; i < a.size(); i++){
        dp[i] = -1;
        for(int j = 0; j < i; j++){
            if(dp[j] < 0) continue;
            int cost = dp[j] - (a[i].x - a[j].x);
            if(cost >= 0){
                dp[i] = max(dp[i], min(cost, a[i].r) + a[i].f);
            }
        }
        if(dp[i] - h + a[i].x >= 0 && a[i].x <= h || a[i].x >= h)return true;
    }
    return false;
}

void solve(){
  a[0] = {0,0,0};
  int l = 0, r = inf;
  int ans = 0;
  while(l <= r){
    int mid = (l+r)/2;
    if(check(mid)) {
      r = mid-1;
      ans = mid;
    }
    else l = mid + 1;
  }
  cout << ans;
}
signed main(){
  ios_base::sync_with_stdio(false);
  cout.tie(nullptr);
  cin.tie(nullptr);
  cin >> n >> h;
  a.resize(n+1);
  for(int i = 1;i<=n;i++)
    cin >> a[i].x >> a[i].f >> a[i].r;
  
  sort(a.begin()+1,a.end());
  solve();
  
}
#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...