编程题-汽车加油-优先队列

来源:互联网 发布:2017年二级c语言题库 编辑:程序博客网 时间:2024/06/03 18:35
/* * test.cpp * *  Created on: Feb 3, 2015 *      Author: lizo *//*你需要驾驶一辆卡车行驶L单位距离。最开始时,卡车上有P单位的汽油。卡车没开1单位距离需要消耗1单位的汽油。如果在途中车上的汽油耗尽,卡车就无法继续前行,因而无法到达终点。在图中一共有N个加油站。第i个加油站在距离起点Ai单位距离的地方,最多可以给卡车加Bi单位汽油。假设卡车的燃料箱的容量是无限大的。请问卡车能否到达终点?如果可以最小需要加多少次油,否则输出-1;思路:我们先假设卡车在有油的情况下一直跑,知道油耗尽的时候,再考虑在经过的加油站中,能加油最大的加油站加油,所以需要一个优先队列,没经过一个加油站则放进队列中*/#include <iostream>#include <queue>using namespace std;int main(void){int L,P,N;cin>>L>>P>>N;int *A=new int[N+1];int *B=new int[N+1];A[N]=L;B[N]=0;for(int i=0;i<N;i++){cin>>A[i];}for(int i=0;i<N;i++){cin>>B[i];}//记录油箱里面到油到单位int tank = P;//答案int ans = 0;//记录当前位置int pos = 0;priority_queue<int> que;for(int i = 0 ; i < N+1 ; i++){//距离下个加油站到距离int dis = A[i] - pos;while( tank < dis){if(que.empty()){cout<<"-1"<<endl;return 0;}tank += que.top();que.pop();ans++;}tank -= dis;pos = A[i];que.push(B[i]);}cout<<ans<<endl;}


0 0
原创粉丝点击