题目分享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 ...
随机推荐
- 写日志 使用nnlog
import nnlog log=nnlog.Logger(r"/学习/接口自动化/BestTest/10.26/book_server.log",backCount=5,leve ...
- JAVA debug 调试demo
1.设置断点,在代码的行号后面鼠标左键即可2.想要看调用方法的执行流程,那么调用方法也要加断点. package day6_debug; /* * 1.设置断点,在代码的行号后面鼠标左键即可 * 2. ...
- 教你爬取腾讯课堂、网易云课堂、mooc等所有课程信息
本文的所有代码都在GitHub上托管,想要代码的同学请点击这里
- ZooKeeper 如何保证数据一致性?
在分布式场景中,ZooKeeper 的应用非常广泛,比如数据发布和订阅.命名服务.配置中心.注册中心.分布式锁等. 在分布式场景中,ZooKeeper 的应用非常广泛,比如数据发布和订阅.命名服务.配 ...
- pgsql中的事务隔离
pgsql中的事务隔离级别 前言 事物隔离级别 在各个级别上被禁止出现的现象是 脏读 不可重复读 幻读 序列化异常 读已提交隔离级别 可重复读隔离级别 可序列化隔离级别 摘录 pgsql中的事务隔离级 ...
- log4j入门(转) --- 很详细 也很简单容易懂
log4j入门(转) Log4j实在是很熟悉,几乎所有的Java项目都用它啊.但是我确一直没有搞明白.终于有一天我受不了了,定下心去看了一把文档,才两个小时,我终于搞明白了.一般情况下Log4j总是和 ...
- stand up meeting 12-2
今天因为各位组员组里项目原因没有集中在一起进行stand up meeting.但是士杰和天赋国庆分别对项目进度和前后端的结合进行的沟通. 针对后端部分,天赋完成了GetRankingData API ...
- Gatling脚本编写技巧篇(二)
脚本示例: import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.durati ...
- 任意用户密码重置的十种姿势=====>学习笔记!
原学习视频链接:https://www.butian.net/School/content?id=214%E2%80%98 1.验证码不失效 原因:获取的验证码缺少时间限制,仅判断验证码是否不正确而未 ...
- XSS语义分析的阶段性总结(一)
本文作者:Kale 前言 由于X3Scan的研发已经有些进展了,所以对这一阶段的工作做一下总结!对于X3Scan的定位,我更加倾向于主动+被动的结合.主动的方面主要体现在可以主动抓取页面链接并发起请求 ...