注意題目給的是到終點的距離,需要轉成到起點的距離,還有就是將終點也看成是加油站,這樣寫起來方便很多,不必要單獨考慮最後一個加油站不在終點以後的情況
#include#include #include #include #include using namespace std; int N,P,L; pair d[10100]; bool cmp(pair a, pair b) { return a.first > b.first; } void solve() { priority_queue que; sort(d,d+N,cmp); d[N].first = L, d[N++].second = 0; int ans = 0, pos = 0, tank = P; for(int i = 0; i < N; i++) { if(i != N - 1) d[i].first = L - d[i].first; int dis = d[i].first - pos; while(tank < dis) { if(!que.empty()) { tank += que.top(); que.pop(); ans++; } else { cout<<"-1"< N) { for(int i = 0; i < N; i++) { cin>>d[i].first>>d[i].second; } cin>>L>>P; solve(); } return 0; }