汽车加油问题

2019-04-14 08:33发布

题目背景

MJJ驾驶着一辆特斯拉跑车,他需要开LLLkm的路程到A市,跑车上有PPP度电,卡车没开1km就需要1度电,如果在途中电路耗尽,则无法前进到达终点。

题目描述

在途中一共有NNN个充电桩,第iii个充电桩在距离起点aia_iai​km的位置,最多可以给汽车充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