已知一条公路上,有一个起点与一个终点,这之间有n个加油站;已知这n个加油站到终点的距离d与各个加油站可以加油的量l,起点位置至终点的距离L与起始时刻邮箱中汽油量P;假设使用1个单位的汽油即走1个单位的距离,邮箱没有上限,最少加几次油,可以从起点开至终点?(如果无法达到终点,返回-1)
#include<vector>
#include<algorithm>
#include<queue>
bool cmp(const std::pair<int, int>& a, const std::pair<int, int>& b)
{
return a.first > b.first;
}
int get_minimum_top(int L, int P, std::vector<std::pair<int, int>>& stop)
{
std::priority_queue <int> Q;
int result = 0;
stop.push_back(std::make_pair(0, 0));
std::sort(stop.begin(), stop.end(), cmp);
for (unsigned int i = 0; i < stop.size(); i++)
{
int dis = L - stop[i].first;
while (!Q.empty()&&P<dis)
{
P += Q.top();
Q.pop();
result++;
}
if (Q.empty()&&P<dis)
{
return -1;
}
P = P - dis;
L = stop[i].first;
Q.push(stop[i].second);
}
return result;
};