제출 #1309504

#제출 시각아이디문제언어결과실행 시간메모리
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...