洛谷 -P1007 独木桥(模拟,思维)

独木桥

题目背景

战争已经进入到紧要时间。你是运输小队长,正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们。士兵们十分愤怒,因为这座独木桥十分狭窄,只能容纳 1 1 1 个人通过。假如有 2 2 2 个人相向而行在桥上相遇,那么他们 2 2 2 个人将无法绕过对方,只能有 1 1 1 个人回头下桥,让另一个人先通过。但是,可以有多个人同时呆在同一个位置。

题目描述

突然,你收到从指挥部发来的信息,敌军的轰炸机正朝着你所在的独木桥飞来!为了安全,你的部队必须撤下独木桥。独木桥的长度为 L L L,士兵们只能呆在坐标为整数的地方。所有士兵的速度都为 1 1 1,但一个士兵某一时刻来到了坐标为 0 0 0 L + 1 L+1 L+1 的位置,他就离开了独木桥。

每个士兵都有一个初始面对的方向,他们会以匀速朝着这个方向行走,中途不会自己改变方向。但是,如果两个士兵面对面相遇,他们无法彼此通过对方,于是就分别转身,继续行走。转身不需要任何的时间。

由于先前的愤怒,你已不能控制你的士兵。甚至,你连每个士兵初始面对的方向都不知道。因此,你想要知道你的部队最少需要多少时间就可能全部撤离独木桥。另外,总部也在安排阻拦敌人的进攻,因此你还需要知道你的部队最多需要多少时间才能全部撤离独木桥。

输入格式

第一行共一个整数 L L L,表示独木桥的长度。桥上的坐标为 1 , 2 , ⋯ , L 1, 2, \cdots, L 1,2,,L

第二行共一个整数 N N N,表示初始时留在桥上的士兵数目。

第三行共有 N N N 个整数,分别表示每个士兵的初始坐标。

输出格式

共一行,输出 2 2 2 个整数,分别表示部队撤离独木桥的最小时间和最大时间。 2 2 2 个整数由一个空格符分开。

样例 #1

样例输入 #1

4
2
1 3

样例输出 #1

2 4

提示

对于 100 % 100\% 100% 的数据,满足初始时,没有两个士兵同在一个坐标, 1 ≤ L ≤ 5 × 1 0 3 1\le L\le5\times 10^3 1L5×103 0 ≤ N ≤ 5 × 1 0 3 0\le N\le5\times10^3 0N5×103,且数据保证 N ≤ L N\le L NL


在做这道题的时候思路走偏了,导致想用找规律的方法来解决这道题,最后当然是不对的。

首先对于两个迎面而走的士兵,会有如图所示的走法:

在这里插入图片描述
所以就相当于a2和a1擦肩而过,然后a2走a2的,a1走a1的一样。

也就是说我们不必考虑每两个士兵会在什么时候什么地点相遇。

在求解第一问最小时间的时候,我们只需要让所有士兵去找左右两端更近的那一边走就可以了,因为就算相撞也是擦肩而过。
那么最终得到的最长时间就是花费时间最长的那个士兵走到头所需要的时间,所以可以直接枚举所有士兵,先对他们向左和向右的时间花费取最小值,然后再从全局取所有最小值的最大值。

在求解第二问的时候,可以对所有士兵的坐标进行排序,最靠左的就让他向右走,最靠右的就让他向左走,然后在他们两个中间取最大值,这样就能够求解出时间最大值。

CODE:

#include<bits/stdc++.h>
using namespace std;
const int N = 5e3+10;int a[N];int main(){int l,n;cin >> l >> n;for(int i = 1;i <= n;i++){cin >> a[i];}if(n == 0){		//特判cout << 0 << " " << 0 << endl;return 0;}if(n == 1){cout << min(a[1],l-a[1]+1) << " " << max(a[1],l - a[1] + 1);return 0;}int res = -1e9;for(int i = 1;i <= n;i++){res = max(res,min(a[i],l - a[i] + 1));}cout << res << " ";sort(a+1,a+1+n);res = max(a[n],l - a[1] + 1);cout << res << endl;return 0;
}

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

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

相关文章

angular17 打包项目放在了多出了个browser目录

修改package.json配置文件&#xff0c;把 "builder": "angular-devkit/build-angular:application", 改成"builder": "angular-devkit/build-angular:browser", 把"browser": "src/main.ts",改成"main&qu…

排队分红,你想象不到的电商新玩法

亲爱的朋友们&#xff0c;我是微三云的周丽&#xff0c;一名专注于私域电商模式创新的探索者。 随着互联网的迅猛发展&#xff0c;电商行业的商业模式也在不断演变。最近&#xff0c;一种全新的消费返利模式——排队分红模式&#xff0c;成为了业界瞩目的焦点。这一模式结合了…

组合模式【结构型模式C++】

1.概述 组合模式又叫部分整体模式属于结构型模式&#xff0c;是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象&#xff0c;用来表示部分以及整体层次。 2.结构 组件&#xff08;Component&#xff09;:定义了组合中所有对象的通用接口&#xff0c…

three.js(3):添加three. js坐标轴、光源和阴影效果

1 实现步骤 要实现阴影效果同样需要几个重要的概念。 我们首先研究一下日常生活中是如何产生阴影效果的。 需要有光。需要一个物体&#xff0c;比如苹果、狗等。需要一个接受投影的元素&#xff0c;比如地面、桌面等。 在 Three.js 中要产生阴影效果其实和现实世界的原理差…

python:使用scipy及numpy对三维空间点进行插值并可视化

用scipy及numpy对三维空间点进行插值并可视化 示例 1示例 2示例 3 示例 1 要在Python中对三维坐标空间点进行插值&#xff0c;可以使用SciPy库中的插值函数。首先&#xff0c;需要安装SciPy库。可以使用以下命令来安装&#xff1a; pip install scipy接下来&#xff0c;可以使…

mysql 5.7分组报错问题 Expression #1 of ORDER BY clause is not in GROUP BY clause

解决方案&#xff1a; select version(), sql_mode;SET sql_mode(SELECT REPLACE(sql_mode,ONLY_FULL_GROUP_BY,)); 完美的解决方案是&#xff1a; 1 show variables like "sql_mode"; 2 3 set sql_mode; 4 set sql_modeNO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABL…

在Debian上可以部署哪些有用的服务?

2024年4月20日&#xff0c;周六下午 在 Debian 上可以部署许多有用的服务&#xff0c;以满足各种需求。 以下是一些常见的有用服务&#xff1a; Web 服务器&#xff1a;如 Apache、Nginx、Lighttpd 等&#xff0c;用于托管网站和 Web 应用。数据库服务器&#xff1a;如 MySQL…

java面向对象.day26(抽象类)

说明&#xff1a; Java抽象类是一种特殊的类&#xff0c;它不能被直接实例化&#xff0c;只能作为其他类的基类&#xff08;即超类或父类&#xff09;。抽象类的主要作用是定义一组公共的行为和属性&#xff0c;这些行为和属性可以由其子类共享和继承。 1. 定义抽象类 抽象类…

分布式与一致性协议之拜占庭将军问题(一)

拜占庭将军问题 概述 拜占庭将军问题其实是借拜占庭将军故事展现了分布式共识问题&#xff0c;探讨和论证了解决的办法。实际上&#xff0c;拜占庭将军问题是分布式领域最复杂的一个容错模型&#xff0c;一旦搞懂了它&#xff0c;久能掌握分布式共识问题的解决思路&#xff0…

Oracle21C 引入HR实例(linux)

1、下载资源 https://github.com/oracle-samples/db-sample-schemas点击code&#xff08;代码&#xff09;下载 2、上传Sql文件 解压之后将human_resources里的文件复制到demo\schema\目录&#xff08;具体目录前面的路径是你安装的路径&#xff09;下&#xff0c;如下图 3、…

【LLM】LLM API 开发

文章目录 LLM API 开发LLM入门基本概念LLM API使用实名认证创建应用使用API Prompt Engineering思考总结 参考文章 什么是提示工程&#xff08;Prompt Engineering&#xff09;&#xff1f; ChatGPT Prompt 最佳指南一 LLM API 开发 LLM入门基本概念 Prompt Prompt 最初是 NL…

TFTLCD原理硬件介绍

介绍 TFT LCD&#xff08;薄膜晶体管液晶显示器&#xff09;是一种广泛使用的显示技术&#xff0c;它结合了薄膜晶体管&#xff08;TFT&#xff09;和液晶显示&#xff08;LCD&#xff09;技术。TFT LCD的主要特点是使用TFT矩阵来控制施加到每个像素的电压&#xff0c;从而实现…

Rumble Club加速器哪个好用 稳定好用的联机加速器推荐

Rumble Club加速器哪个好用 稳定好用的联机加速器推荐 说到Rumble Club这款游戏&#xff0c;各位休闲玩家肯定不陌生&#xff0c;这是一款基于物理定律的在线玩家对战游戏&#xff0c;玩法独特且充满乐趣。玩家可以使用各种富有想象力的方式推搡、击打和超越对手&#xff0c;以…

通过Docker新建并使用MySQL数据库

1. 安装Docker 确保您的系统上已经安装了Docker。可以通过以下命令检查Docker是否安装并运行&#xff1a; systemctl status docker如果没有安装或运行&#xff0c;请按照官方文档进行安装和启动。 2. 拉取MySQL镜像 从Docker Hub拉取MySQL官方镜像。这里以MySQL 5.7版本为…

@Autowired和@Resource

Spring支持使用@Autowired、 @Resource、@Inject三个注解进行依赖注入。 @Component(“id”) id可选,告诉spring这是一个组件,交由spring管理, 相当于xml当中的<bean>配置。 @Autowired 默认按类型进行装配(该注解由spring提供,org.springframework.beans.factory.…

笨蛋学C++【C++基础第四弹】

C基础第四弹 11.C日期&时间12.C基本的输入输出12.1I/O库头文件12.2标准输出流&#xff08;cout&#xff09;12.3标准输入流&#xff08;cin&#xff09;12.4标准错误流&#xff08;cerr&#xff09;12.5标准日志流&#xff08;clog&#xff09; 13.C结构体13.1访问结构体成…

防水游泳耳机有哪些?热推榜4大精品游泳耳机,绝不失望!

随着科技的发展和人们对生活品质追求的提高&#xff0c;防水游泳耳机已经成为许多游泳爱好者的必备装备。它们不仅能够在水下提供清晰的音质&#xff0c;还能保证使用者的安全&#xff0c;避免因长时间水下活动而对耳朵造成损伤。然而&#xff0c;面对市场上琳琅满目的产品&…

HarmonyOS ArkUI实战开发-NAPI数据类型

在前两篇文章里笔者简单介绍了 NAPI 工程结构以及生成的 cpp 源码部分&#xff0c;其中 JS 应用层传递过来的数据被封装在了 napi_value 中&#xff0c;使用前先要转换成对应的 C/C 数据类型&#xff0c;C/C 端的数据也要转换成 napi_value 数据类型传递给 JS 应用层&#xff0…

小公司如何实现全员经营?

小公司如何实现全员经营&#xff1f;这是一个值得深入探讨的问题。全员经营不仅意味着每个员工都要参与到公司的经营活动中&#xff0c;还需要他们拥有对公司的责任感和使命感&#xff0c;以实现公司的整体目标。对于小公司而言&#xff0c;实现全员经营更是一个挑战&#xff0…

数字化革新:可视化墨水屏引领基板工艺MSAP贴膜阶段迈向无纸化高端制造应用背景

随着科技的飞速发展和环境保护意识的日益增强&#xff0c;制造印刷电路板&#xff08;PCB&#xff09;行业正面临着提升生产效率、降低资源消耗和推动绿色制造的迫切需求。 问题&#xff1a; PCB生产过程对洁净度要求高&#xff0c;传统打印的纸张会有粉尘&#xff0c;纸屑&am…