题目背景
MJJ驾驶着一辆特斯拉跑车,他需要开LLLkm的路程到A市,跑车上有PPP度电,卡车没开1km就需要1度电,如果在途中电路耗尽,则无法前进到达终点。
题目描述
在途中一共有NNN个充电桩,第iii个充电桩在距离起点aia_iaikm的位置,最多可以给汽车充BiB_iBi度电,假设跑车的电瓶容量无限大,请问MJJ是否能到达终点,如果可以,请输出最少需要充多少次电?否则输出-1。
输入输出格式
输入格式:
第一行三个正整数,分别代表NNN、LLL、PPP。
第二行,N个正整数,代表第i个充电桩的位置
第三行,N个正整数,代表第i个充电桩含有的最大电量。
输出格式:
如题干。
输入输出样例
输入样例#1:
4 25 10
10 14 20 21
10 5 2 4
输出样例#1:
2
说明
1<=N<=10000
1<=L,P<=1000000
1 <= A_i <= L
1 <= B_i <= 100
这一题使用到优先队列,将可以到达的位置的加油量从大到小存到队列中,若不能达到下一个点,则pop掉最大的加油量,若此时队列为空,则代表无法加油,即无法到达指定位置。
// luogu-judger-enable-o2
#include
#include
using namespace std;
int main()
{
int a[10005],b[10005];
int n,l,p;
scanf("%d %d %d",&n,&l,&p);
for(int i=0;i q;
int ans=0,dist=0,full=p,t=0; //ans是加油次数,dist是此时位置,full是此时油量
for(int i=0;i