题目分享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 ...
随机推荐
- JAVA中基本类型和包装类之间的相互转换
转自:https://www.imooc.com/code/2250 仅做个人学习记录之用,侵删. 基本类型和包装类之间经常需要互相转换,以 Integer 为例(其他几个包装类的操作雷同哦): 在 ...
- Hadoop(一) centos7 jdk安装,hadoop安装|3
安装JDK 下载jdk https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择最 ...
- 很用心的为你写了 9 道 MySQL 面试题
MySQL 一直是本人很薄弱的部分,后面会多输出 MySQL 的文章贡献给大家,毕竟 MySQL 涉及到数据存储.锁.磁盘寻道.分页等操作系统概念,而且互联网对 MySQL 的注重程度是不言而喻的,后 ...
- 2019-05-12 Python之模拟体育竞赛
一.简介 可以选择任意规则,模拟不同的两个队伍进行球赛的模拟比赛 二.源代码 函数介绍: from random import * #输出介绍信息 def printIntro(): print(&q ...
- threejs地球之后:动画的控制
上一篇知道如何制作threejs地球之后,就正式coding了,当然还是使用最心爱的Vue.本篇会有一些代码,但是都是十几行的独立片段,相信你不用担心. 布局 在进入本篇主题前,要简单看一下xplan ...
- D. Ehab the Xorcist
题意: 略: 感觉被演了一波,这是CFdiv2吗? 算是这个构造题吧. 1 首先我们可以将u进行二进制拆分来考虑.加入u>v那么小与v的那些数在怎么拼接也无法使异或值为u. 比如二进制U=1 0 ...
- CISCN love_math和roarctf的easy_clac学习分析
Love_math 题目源码: <?php error_reporting(0); //听说你很喜欢数学,不知道你是否爱它胜过爱flag if(!isset($_GET['c'])){ show ...
- SpringMVC转发及重定向
基础环境搭建请参考SringMVC入门程序 1:springmvc-servlet.xml <?xml version="1.0" encoding="UTF-8& ...
- JDBC 中的事务和批处理 batch
JDBC事务处理: 事务处理一般在事务开始前把事务提交设置为false 所有DML语句执行完成后提交事务 demo: package com.xzlf.jdbc; import java.sql.Co ...
- 关于mysql的范式——反范式的思路
数据库的设计,是有模式的,就是在实际生产的项目中,按照怎样怎样步骤的去做.减少冗余呀,一对多呀等等. 那么回归到一个问题:数据库究竟是为了添加,还是为了查询?这个问题有些轴,以 增删改查四律而言,都是 ...