【POJ No. 2431】 丛林探险 Expedition

news2024/12/23 6:34:21

【POJ No. 2431】 丛林探险 Expedition

北大OJ 题目地址

在这里插入图片描述

【题意】

一群人开着一辆卡车冒险进入丛林深处,卡车油箱坏了,每走1米就会漏1升油,他们需要到最近的城镇(距离不超过106米)修理卡车。卡车当前位置和城镇之间有N (1≤N≤104 )个加油站,每个加油站都可以加油1~100升,卡车油箱容量没有限制。目前卡车距离城镇L 米,有P 升油(1≤P ≤106 )。

他们希望在前往城镇的路上尽可能少地停下加油,请给出到达城镇所需的最少加油次数。

【输入输出】

输入:

第1行包含单个整数N ,表示加油站的数量。第2…N +1行,每行都包含两个整数,用于描述加油站,第1个整数是从城镇到加油站的距离,第2个整数是该加油站的可用油量。第N +2行,每行都包含两个整数L 和P 。

输出:

输出到达城镇所需的最少加油次数。若无法到达城镇,则输出-1。

【样例】

在这里插入图片描述

【思路分析】

若在可以到达的距离范围内有多个加油站,则将这些站点的加油量入队(优先队列)。若走到下一个加油站之前油会耗尽,则需要加油(优先队列中最大加油量)后继续走,当油量大于或等于卡车到城镇的距离L 时结束。

【举个栗子】

在输入样例中,卡车距离城镇25米,有10升油。沿着这条路,距离城镇4、5、11和15米有4个加油站(可求出这些加油站距离卡车21、20、14和10米),这些加油站可分别提供多达4、2、5、10升的油。

在这里插入图片描述

求解的过程:因为卡车有10升油,所以首先开车10米,在第1个加油站加油10升,在第2个加油站加油5升,油箱的油量累计可到达距离25,可直接开车到镇上。

∴ 答案:停靠2次。

在这里插入图片描述

【算法设计】

① 按照距离降序排序。

② 初始化。加油次数ans=0,当前可到达的位置pos=P ,第k 个站点k =0。

③ 若pos<L ,则执行第4步;否则结束,输出答案。

④ 若可到达的位置超过第k 个加油站,则将第k 个站点的加油量入队(最大值优先),k ++,一直循环到不满足条件为止。

⑤ 若队列为空,则输出-1;否则加油(pos+=que.top();que.pop();ans++),转向第3步。

【算法实现】

#include<cstdio>
#include<queue>
#include<algorithm>

using namespace  std;

#define N 10005

int n , L, P;

struct node{
	
	int dis , add; //距离;可加油量 
	
}port[N];

bool cmp(node a , node b){
	
	return a.dis > b.dis; //按距离降序 
}

void solve(){
	
	priority_queue<int>que;
	
	//ans:加油次数; pos:当前可到达的位置 k :第k 个加油站
	int ans = 0, pos = P , k = 0;
	
	while(pos < L){
		
		while(pos >= L - port[k].dis && k < n){
			que.push(port[k].add);
			k ++;
		}
		
		if(que.empty()){
			
			printf("-1\n");
			return ;
		}
		else{
			
			pos += que.top();
			que.pop();
			
			ans ++;
		}
	} 
	printf("%d\n" , ans);
} 

int main(){
	
	while(~scanf("%d" , &n)){
		
		for(int i = 0 ; i < n  ; i++){
			
			scanf("%d %d" , &port[i].dis , &port[i].add);
		}
		
		scanf("%d%d" , &L , &P);
		sort(port, port + n ,cmp);
		
		solve();
	}
	return 0;
}



在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么将视频转化为gif?

如何将视频转化为gif&#xff1f;gif是一种大家平时常见的动态图片格式&#xff0c;动图是一种非常有意思的图片种类&#xff0c;gif一般都是一些非常有意思的小动图&#xff0c;例如我们在群聊时使用的动态表情包&#xff0c;还有一些球迷朋友喜欢看的足球进球动图等。gif动图…

asp核酸检测预登记系统源码

用asp开发的核酸检测预登记系统上线了&#xff0c;用户填写姓名&#xff0c;手机&#xff0c;身份证号&#xff0c;地址等信息后生成一个加密的二维码&#xff0c;管理员扫码后可以得到真实的二维码文字信息。主要为方便核酸采集统计托底等&#xff0c;也可以用作会议入场信息采…

【NLP】使用 PyTorch 通过 Hugging Face 使用 BERT 和 Transformers 进行情感分析

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

初识Kafka构造组成

在刚学习kafka的时候&#xff0c;有时候会比较纳闷broker是什么&#xff1f;topic又是什么&#xff1f;一台机器上有多少broker&#xff1f;又有多少的topic和partition&#xff1f;由下面这张图来初识我们的kafka&#xff1a; 上图中包含了一个kafka集群的所有组件&#xff1a…

大数据毕业设计题目推荐 毕设选题大全

文章目录0 前言1 如何选题1.1 选题技巧&#xff1a;如何避坑(重中之重)1.2 为什么这么说呢&#xff1f;1.3 难度把控1.4 题目名称1.5 最后2 大数据 - 选题推荐2.1 大数据挖掘类2.2 大数据处理、云计算、区块链 毕设选题2.3 大数据安全类2.4 python大数据 游戏设计、动画设计类2…

LeetCode-808. 分汤【动态规划,概论与统计,记忆化搜索】

LeetCode-808. 分汤【动态规划&#xff0c;概论与统计&#xff0c;记忆化搜索】 题目描述&#xff1a;解题思路一&#xff1a;动态规划&#xff0c;这里将所有的汤除了25&#xff0c;缩小数值。自底向上解题思路二&#xff1a;记忆化搜索&#xff0c;自顶向下搜索&#xff0c;会…

R summarize()分组摘要

summarize()分组摘要分组平均值最大最小值计数 library(nycflights13) library(tidyverse)summarize()可以将数据折叠成一行 如果不与group_by()一起使用&#xff0c;那么summarize()也没什么用 summarize(flights, delay mean(dep_delay, na.rm TRUE))delay12.63907 group…

基于PHP+MySQL仓库管理系统的设计与实现

PHP&#xff1a;MySQL仓库管理系统的设计与实现是一个集合了中小型超市所有特点的一个管理系统, 它使用当下最流行的PHP语言来进行开发,实现了管理员登录,员工登录,超市内物资基本信息管理,进货信息管理,销售信息管理,超市内员工信息管理,查询统计等功能, 通过这些功能可以让超…

Kubernetes云原生实战01 Kubernetes高可用部署架构

大家好&#xff0c;我是飘渺。从今天开始我们将正式开始Kubernetes云原生实战系列&#xff0c;欢迎持续关注。 Kubernets核心组件 Kubernetes中组件众多&#xff0c;要完全介绍清楚估计要写上厚厚一本书&#xff0c;我们实战系列主要记住几个核心组件就行&#xff0c;即两种节…

【LeetCode每日一题:808.分汤~~~边界条件的特判+记忆化搜索】

题目描述 有 A 和 B 两种类型 的汤。一开始每种类型的汤有 n 毫升。有四种分配操作&#xff1a; 提供 100ml 的 汤A 和 0ml 的 汤B 。 提供 75ml 的 汤A 和 25ml 的 汤B 。 提供 50ml 的 汤A 和 50ml 的 汤B 。 提供 25ml 的 汤A 和 75ml 的 汤B 。 当我们把汤分配给某人之后…

vue3项目,vite+vue3+ts+pinia(10)-elementplus布局

项目创建好,接下来引入Container 布局容器, 在src下新建layout文件夹, layoutName.vue <template><el-container><el-aside width"200px">aside</el-aside><el-container><el-header>Header</el-header><el-main>…

CompletableFuture异步编程Api使用详解

Java 8 引入了很多的新特性&#xff0c;其中就包含了 CompletableFuture 类的引入&#xff0c;它允许我们通过在与主应用程序线程不同的线程上&#xff08;也就是异步&#xff09;运行任务&#xff0c;并向主线程通知任务的进度、完成或失败&#xff0c;来编写非阻塞代码。 Fu…

LVS-DR模式部署

目录 一、环境准备 1、DR模式介绍 2、DR模式工作原理 3、服务器准备 二、实验拓扑 三、配置网络环境 1、配置调度器网络环境 2、配置Web服务器网络环境 四、创建LVS-DR集群 1、创建LVS集群 2、添加Real Server 3、查看lvs配置 五、LVS服务器开启路由转发 六、效果…

TCP四次挥手 2MSL TIME_WAIT详解

TCP四次挥手 & 2MSL & TIME_WAIT详解TCP四次挥手流程各状态解析2MSL(2倍最大报文段生成时间)2MSL (Maximum Segment Lifetime) TIME_WAIT状态的存在有两个理由该状态为什么设计在主动关闭这一方?如何正确对待2MSL TIME_WAIT?TCP四次挥手流程 【注意】只要是申请关闭连…

基于Open vSwitch的传统限速和SDN限速--实验

基于Open vSwitch的传统限速和SDN限速--实验基于Open vSwitch的传统限速和SDN限速--实验1.下载与安装1.1 安装Docker1.2 Open vSwitch的安装2.配置实验环境3.实验步骤3.1启动floodlight控制器3.2创建拓扑3.3网卡限速3.4队列限速3.5 Meter表限速4.三种方式数据对比5.实验分析6.总…

仿大众点评——秒杀系统部分03——RabbitMq措施

RabbitMq保证消息不丢失 RabbitMQ如何保证消息的可靠性&#xff1a; 1.从生产者到消息队列&#xff0c;congfirm模式&#xff08;与事务相比confirm模式最大的优势是异步&#xff09;通过消息确认机制来保证&#xff0c;通过给每个指派唯一标志&#xff0c;完成消费后返回ack确…

【LeetCode每日一题】——136.只出现一次的数字

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 数组 二【题目难度】 简单 三【题目编号】 136.只出现一次的数字 四【题目描述】 给你一个 非…

[附源码]SSM计算机毕业设计风景区管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

再学DataX

一、DataX简介 DataX官网文档&#xff1a;https://github.com/alibaba/DataX/blob/master/introduction.md DataX 是一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同…

MyBatis基于XML的使用——动态sql

1、动态sql 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它 类似的框架&#xff0c;你应该能理解根据不同条件拼接 SQL 语句有多痛苦&#xff0c;例如拼接时要确保不能忘记添加必要的空格&#xff0c;还要注意去掉列表最后一个列名的逗号。 利用动态 SQL&#…