题目背景
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<bits/stdc++.h>
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<n;i++)
cin>>A[i];
for(int i=0;i<n;i++)
cin>>B[i];
A[n]=l;
B[n]=0;
priority_queue<int>q;
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"<<endl;
return 0;
}
tank += q.top();
q.pop();
ans++;
}
tank -= d;
pos=A[i];
q.push(B[i]);
}
cout<<ans<<endl;
return 0;
}