Expedition (POJ 2431)
时间:2022-07-24
本文章向大家介绍Expedition (POJ 2431),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意:你需要驾驶一辆卡车行驶L单位长度。最开始的时候,卡车上有P单位的油。卡车每开1单位距离需要消耗1单位的汽油。如果在途中车上汽油耗尽,卡车就无法继续前行,因而无法到达终点。在途中一共有n个加油站。第i个加油站在距离起点Ai单位长度的地方,最多可以给汽车加油Bi单位的汽油。假设卡车的燃油箱的容量是无限大的,无论加多少油都没有关系。那么请问卡车是否能到达终点?如果可以,最少需要加多少次油?不能到达就输出-1。
思路:我们什么时候需要加油呢?肯定没油或者说是剩余的油量不能够使得卡车到达下一加油地点,那么我们应该在之前进行加油。我们要想次数最少,那么我们可定选择之前某个Bi最大的进行加油,全部加上,如果还不够,就选择次大的!如此直到油量能够支持卡车到下一加油站。那么我们考虑优先队列,假设目前车的油量还够,那么我们就记录当前位置跟油量,并Bi压入que中,然后如果在后面油量不够了,我们就需要从队列中每次取出之前能加最大油量的那个加油站,然后加油,如果队列是空的,说明没有加油站可以加油了,直接输出-1,否则,油量 + Bi,然后从队列弹出当前元素。很有意思的一个题目呢!!!
#include<bits/stdc++.h>
#define maxn 200004
using namespace std;
int l,p,n;
int a[maxn],b[maxn];//距离起点的距离跟最多加油量
void solve(){
a[n] = l;//为了方便起见,我们把终点也设为加油站。
b[n] = 0;
n++;
priority_queue<int> que;
int ans=0,pos = 0,tank = p;//分别表示加油次数,所在位置,油箱中汽油的量。
for(int i=0;i<n;i++){
int d = a[i] - pos;
while(tank - d < 0){
if(que.empty()){
puts("-1");
return ;
}
tank += que.top();
que.pop();
ans++;
}
tank -= d;
pos = a[i];
que.push(b[i]);
}
cout<<ans<<endl;
}
int main(){
cin>>n>>l>>p;//n表示加油站数量,l表示行驶长度,p表示车上油
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
cin>>b[i];
}
solve();
return 0;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python 操作 txt 文件中数据教程[4]-python 去掉 txt 文件行尾换行
- java字符数组char[]和字符串String之间的转换
- python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件
- python操作txt文件中数据教程[1]-使用python读写txt文件
- python循环删除列表元素常见错误与正确方法
- Python字符串,整型,浮点数相互转化
- python创建与遍历List二维列表
- 论文研读-基于变量分类的动态多目标优化算法
- matplotlib交互模式与pacharm单独Figure设置
- numpy二进制转换和范围缩放
- 使用数组作为索引遍历numpy数组
- enumerate 遍历numpy数组
- 两种群决策变量高斯分布的KL散度和WD距离
- Tensorboard 显示计算图节点信息
- 使用tqdm组件构造程序进度条