题目背景
MJJ驾驶着一辆特斯拉跑车,他需要开LLkm的路程到A市,跑车上有PP度电,卡车没开1km就需要1度电,如果在途中电路耗尽,则无法前进到达终点。
题目描述
在途中一共有NN个充电桩,第ii个充电桩在距离起点a_ikm的位置,最多可以给汽车充B_i度电,假设跑车的电瓶容量无限大,请问MJJ是否能到达终点,如果可以,请输出最少需要充多少次电?否则输出-1。
输入输出格式
输入格式:
第一行三个正整数,分别代表NN、LL、PP。
第二行,N个正整数,代表第i个充电桩的位置
第三行,N个正整数,代表第i个充电桩含有的最大电量。
输出格式:
如题干
用优先队列去存储经过的充电桩,并从小到大排列,当无法到达下一个点且队列种每种电可充时,则无法到达
#include
const int N=10005;
using namespace std;
int a[N],b[N];
int n,l,p;
void f()
{
a[n]=l;b[n]=0;n++;
priority_queue<int,vector<int>,less<int> > q;
int s=p,t=0,ans=0;
for(int i=0;i<n;i++){
int d=a[i]-t;
while(s-d<0){
if(q.empty()){
cout << "-1" << endl;
return;
}
s += q.top(); q.pop();
ans++;
}
s -= d;
t=a[i];
q.push(b[i]);
}
cout << ans << endl;;
}
int main()
{
cin >> n >> l >> p;
for(int i=0;i<n;i++) cin >> a[i];
for(int j=0;j<n;j++) cin >> b[j];
f();
return 0;
}