题目分享N
题意:有辆车,有r行,s*2列,在第s列和第s+1列之间有个过道,出口在第r+1行的过道处,现在给出每个人的位置(行号和列号),每人每次只能动一格,问最少耗费多长时间全员才能逃出去
分析:假如车上只有一个人,这个人位于x行y列,那他的逃生时间很好求
若y<=s,那所需时间就是s+1-y(走到过道)+r+1-x(在过道中走到出口)=s+r-x-y+2
若y>s,那其实可以将y对称到y'上,然后y'就能和y<=s时一样计算了,而y'=2*s+1-y,也就是说所需的时间是s+r-x-y'+2,其中y'=2*s+1-y
再进一步分析,假如车上有两个人,那么这两个人所需的时间怎么求呢?
很明显,如果这两个人不会相遇的话,所需的时间就是他们时间的最大值,而如果他们相遇的话,那么所需时间就要加一
那如何判断两人是否相遇呢?
假如两人位置分别为x1,y1 x2,y2 默认这两个人无论坐在过道的左侧还是右侧都对称到左侧考虑,为了方便计算,不需要分类讨论
那么这里就有一个问题到底能不能这么对称到左侧考虑呢?或者说如果有个人原来坐在右侧,如果让他做到左侧对称位置上去的话,会不会改变结果呢?
如果两个人恰好就是坐在对称的位置上,那么如果右侧不对称到左边的话,他们两人显然会在过道中间相遇
而对称到左边的话,右边的人显然和左边的人在没开始走的时候就发生了“相遇”,这里就必须要让一个人先走,此时另一个不动,然后他们再继续走,并且显然不会再相遇
但这貌似改变了两个人相遇的地点,不会改变结果吗?再回看到右边不对称到左边的时候,如果这两人在这时候也遵循一个先走,另一个不动的原则,然后他们再走就也不会相遇
也就是说对称与不对称可以用同一种走法来保证时间最大,也就是说走法相同且不影响结果
而如果两个人没有做到对称位置,那显然两个人在自己这行走到过道之前是不会与另一个人相遇的,而如果两个人在走到过道的时候相遇了,而右侧对称过去并走向过道所花的时间是相同的,自然也不会影 响相遇的结果,当然如果两人不相遇也是同理的
所以将右侧对称到左边的考虑是对结果以及运动过程没有影响的,那么这两个人到达对应行过道的时间就是s+1-y1和s+1-y2,而如果x1<=x2,那么他们到达x2行的过道所花的时间就是s+1-y1+x2-x1和s+1-y2,而且他们俩相遇也只可能在这里相遇,并且相遇的条件是到达该地的时间相等,即s+1-y1+x2-x1=s+1-y2,将x2移到右边,并给等式两边都加(r+1)就可以得到s+r-x1-y1+2=s+r-x2-y2+2,这正好是两人单独走到出口所用的时间,也就是说两人相遇与他们到达出口时间相等是等价的
而如果两个人在路上发生了相遇,那么就需要让一个人先走,而和他相遇的其他人要留在原地,当然在这时候可能会有其他人走到这个相遇的位置,那么这段过程的实质就是相遇地点中的一个人与没有相遇的人,到达出口所需的时间-1,其他人不变,那么如何用程序来模拟这个过程呢?
其实很简单,因为每次只能有一个人从出口出去,而且出去的顺序一定是耗时少的在前,耗时多的在后,所以将所有人所需时间排好序之后,用一个变量记录当前的人出去所用的时间,如果遇到相等的话就+1,如果所需时间小于当前时间的话那就说明这个人后来也被堵在了相遇的地方,那也+1,如果没有发生相遇也就是所需时间大于当前的时间,那么就可以将当前时间附成该人所需时间即可
代码:
题目分享N的更多相关文章
- 2019年腾讯PHP程序员面试题目分享
有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群jq.qq.com 1. php 的垃圾回收机制 PHP 可以自动进行内存管理,清除 ...
- 20190924-LeetCode解数独题目分享
解决数独 题目描述 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以 ...
- 题目分享E 二代目
题意:一棵点数为n的树,每个节点有点权,要求在树中中找到一个最小的x,使得存在一个点满足max(该点点权,该点相邻的点的点权+1,其他点的点权+2)=x 分析:首先要能把题目转化为上述题意 首先题目让 ...
- 题目分享D 二代目
题意:给定一个T条边的无向图,求S到E恰好经过N条边的最短路径 T≤100 N≤1000000 分析:(据说好像假期学长讲过) 首先很容易想到的是dp[i][j][k]表示从i到j经过k条边的最短路径 ...
- 题目分享C 二代目
题意:一个数列是由 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6.....组成,也就是1-1,1-2,1-3......并且如果遇到多位数也要拆成数字比如1-10 ...
- 题目分享X
题意:一张票有n位数,如果这张票的前一半数字的和等于后一半数字的和(n一定是偶数),就称这张票为快乐票.有些数被擦除了,标记为’?’(’?‘的个数也是偶数),现在Monocarp 和 Bicarp 进 ...
- 题目分享V
题意:现在两个人做游戏,每个人刚开始都是数字1,谁赢了就能乘以k^2,输的乘以k(k可以是任意整数,每次不一定相同)现在给你最终这两个人的得分,让你判断是否有这个可能,有可能的话Yes,否则No. 分 ...
- 题目分享T
题意:蛐蛐国里现在共有n只蚯蚓(n为正整数).每只蚯蚓拥有长度,我们设第i只蚯蚓的长度为a_i(i=1,2,...,n),并保证所有的长度都是非负整数(即:可 能存在长度为0的蚯蚓).每一秒,神刀手会 ...
- 题目分享P
题意: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双方轮流进行 操作.当一方操作时,他们需要先选择一个不为根的 ...
- 题目分享H 二代目
题意:有m个限制,每个限制l1,r1,l2,r2四个数,限制了一个长度为n的数第l1到r1位要与第l2到r2相同,保证r1-l1=r2-l2,求在限制下一共有多少种数 分析: 暴力的话肯定是从l1-r ...
随机推荐
- day01-课后作业
#1.写一个登陆的程序,最多登陆失败3次#2.输入账号 密码,如果登录成功,程序结束,提示 欢迎 xx 登录,今天的日期是 xx#3.登录失败,重新登陆#3.要判断输入是否为空,什么也不输入,输入空格 ...
- 判断一组checkbox/redio是否被选中,为其添加样式
业务场景:当一行中有一个CheckBox被选中,则为此行添加class. <script type="text/javascript"> $(function(){ $ ...
- shell map数据结构的实现
前言 Bash默认不支持二维数组,如果我们想实现map 数据结构,可以安装如下的方式来进行构造 预备知识 eval: 它是shell内建命令,用于字符串的解析.它会首先扫描命令行 ...
- [转] [知乎] 浅谈Roguelike
浅谈Roguelike 从柏林诠释说起 在2008年召开的国际Roguelike开发会议上,众多的Roguelike开发者与爱好者共同制定了<柏林诠释>,规定了Roguelike游戏需要具 ...
- 【LeetCode】23.合并K个排序链表
题目描述 23.合并K个排序链表 合并k个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] ...
- stand up meeting 12-14
今日更新: 项目的refactor部分均已经基本完成.答题界面和结果展示界面与code hunters team项目的merge部分也已经完成. 当然在这其中我们也遇到了一个小问题,在背单词模块中的词 ...
- python嵌套列表知多少
今天在创建嵌套列表时遇到一个问题,决定看看到底是谁在背后捣鬼 >>> board1 = [[0]*3 for _ in range(3)] [[0, 0, 0], [0, 0, 0] ...
- 基于Python的Webservice开发(四)-泛微OA的SOAP接口
一.功能需求 泛微e-cology可以在流程中调用Webservice接口实现与其他系统的联动等复杂功能.但是目前泛微文档中仅提供了调用的方法,但是没有关于接口的相关开发信息. 本次案例是用Pytho ...
- mybatis源码配置文件解析之二:解析settings标签
在前边的博客中分析了mybatis解析properties标签,<mybatis源码配置文件解析之一:解析properties标签>.下面来看解析settings标签的过程. 一.概述 在 ...
- 【错误】python百分号冲突not enough arguments for format string
query = "SELECT * FROM devices WHERE devices.`id` LIKE '%{}%'".format("f2333") d ...