제출 #1175376

#제출 시각아이디문제언어결과실행 시간메모리
1175376nguyenkhangninh99Fuel Station (NOI20_fuelstation)C++17
37 / 100
200 ms15620 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int maxn = 3e5 + 5; struct ttt{ int x, a, b; } tram[maxn]; bool cmp(ttt c1, ttt c2){ return c1.x < c2.x; } vector<pair<int, int>> tram2[10005]; int n, d; bool check(int mid){ int fuel = mid; for(int i = 1; i <= n; i++){ if(fuel >= tram[i].x) fuel += tram[i].a; else return false; } return true; } bool check2(int f){ int fuel = f; for(int i = 1; i <= d; i++){ if(fuel < i) return false; int l = 0, r = tram2[i].size() - 1, ans = -1; while(l <= r){ int mid = (l + r) / 2; if(tram2[i][mid].first >= f){ ans = mid; l = mid + 1; } else r = mid - 1; } if(ans != -1) fuel += tram2[i][ans].second; } return true; } void solve(){ cin >> n >> d; int mn = 1e9; for(int i = 1; i <= n; i++){ cin >> tram[i].x >> tram[i].a >> tram[i].b; mn = min(mn, tram[i].b); } sort(tram + 1, tram + n + 1, cmp); if(n == 1){ if(max(tram[1].x, d - tram[1].a) <= tram[1].b) cout << max(tram[1].x, d - tram[1].a); else cout << d; } else if(mn == 1e9){ int l = 1, r = d, ans = 1; while(l <= r){ int mid = (l + r) / 2; if(check(mid)){ ans = mid; r = mid - 1; } else l = mid + 1; } cout << ans; } else if(d <= 10000){ for(int i = 1; i <= n; i++) tram2[tram[i].x].push_back({tram[i].b, tram[i].a}); for(int i = 1; i <= d; i++){ sort(tram2[i].begin(), tram2[i].end(), greater<>()); for(int j = 1; j < tram2[i].size(); j--) tram2[i][j].second += tram2[i][j - 1].second; } for(int f = 1; f <= d; f++){ if(check2(f)){ cout << f; return; } } } } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); 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...