洛谷T74799 老司机(优先队列)

2019-04-14 12:17发布

class="markdown_views prism-tomorrow-night"> 题目背景
MJJ驾驶着一辆特斯拉跑车,他需要开LLkm的路程到A市,跑车上有PP度电,卡车没开1km就需要1度电,如果在途中电路耗尽,则无法前进到达终点。 题目描述
在途中一共有N个充电桩,第ii个充电桩在距离起点ai km的位置,最多可以给汽车充Bi 度电,假设跑车的电瓶容量无限大,请问MJJ是否能到达终点,如果可以,请输出最少需要充多少次电?否则输出-1。 输入输出格式
输入格式:
第一行三个正整数,分别代表N、L、P。 第二行,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 <= Ai<=L
1 <= B_i <= 100

标程

#include using namespace std; int main() { int n,l,p;//n个充电桩,路程l千米,初始跑车上有p度电 cin>>n>>l>>p; int A[10005]={0}; int B[10005]={0}; for(int i=0;i>A[i]; for(int i=0;i>B[i]; A[n]=l; B[n]=0; priority_queueq; int ans=0;//答案 int pos=0;//当前位置 int tank=p;//当前车上的油量 for(int i=0;i<=n;i++) { int d=A[i]-pos;//要前进的距离 while(tank-d<0) { if(q.empty()) { cout<<"-1"<