你需要驾驶一辆汽车行驶 L 单位距离。
最开始时, 卡车上有 P 单位的汽油。
汽车每开 1 单位距离需要消耗 1 单位的汽油。
如果在途中车上的汽油耗尽, 车就无法继续前行, 因而无法达到终点。
在途中一共有 N 个加油站。第 i 个加油站在距离 终点 Ai 单位距离的地方, 最多可以给汽车加 Bi 单位汽油。
假设卡车的燃油箱的容量是无限大的。问最少加多少次汽油可以达到终点 ?
无法达到请输出−1。
输入
- 第一行是 N,表示有多少个加油站
- 接下来 NN 行,每行两个整数 Ai,Bi,表示每个加油站距离 终点 的位置,以及最多可以加多少油
- 最后一行是 L, P
- 1≤N≤2∗104
- 1≤L≤106
- 1≤P≤106
- 1≤Ai≤L
- 1≤Bi≤100
输出
- 一个整数,表示最少加多少次油
样例 1
输入
4 4 4 5 2 11 5 15 10 25 10
输出
2
#include<bits/stdc++.h>
using namespace std;
int N;
int A[20001],B[20001];
int L,P;
priority_queue<int> q;
int main()
{
while(cin>>N)
{
for(int i=0;i<N;i++)
{
cin>>A[i]>>B[i];
}
cin>>L>>P;
A[N]==L;
B[N]==0;
N++;
int ans=0,pos=0,tank=P;
for(int i=0;i<N;i++)
{
int d=A[i]-pos;
while(tank<d)
{
if(q.empty())
{
cout<<"-1"<<endl;
return 0;
}
tank+=q.top();
q.pop();
ans++;
}
tank-=d;
pos=A[i];
q.push(B[i]);
}
cout<<ans<<endl;
}
}
本文介绍了一种算法来解决驾驶汽车在有限汽油条件下,如何在N个加油站间最少加油次数到达终点的问题。通过优先队列管理和路径规划,确保在遇到汽油耗尽时能及时补充燃料。
1395

被折叠的 条评论
为什么被折叠?



