Problem C Emergency Evacuation 一道思维题
题目描述



输入

输出

样例
样例输入
样例输入一
样例输入二
样例输出
样例输出一
9
样例输出二
1008
一句话题意:给你一个车厢和一些人,这些人都坐在座位上,求这些人全部出去的时间最小值。
分析
我们先拿最简单的情况来说:车厢中只有一个人,比如下面这幅图

那么很显然,他到达出口所需要的花费步数为5+1=6
是不是太简单了,那我们再加一个人

那么新加的这个人到出口所需要的步数为2+2=4
因为6大于4,所以在第一个人到达距离出口的步数为2的地方时,第二个人已经从出口离开车厢,不会对结果造成影响
最终答案仍为6
那么我们再加一个人

第三个人到达出口所需要的时间为1+1=2
因为2、4、6都不相等,所以此时最终答案仍然为6
这时,我们要加一个最为关键的人——四号

我们会发现4号到达出口的时间和1号一样都为6
这时,问题就来了,1号和4号显然不能同时走出车厢,而他们走出车厢的最小步数又都为6
所以,1号和4号必定有一个人需要停留一步,在下一步时再排到另一个人的后面
这时,因为有了停留的这一步,最大步数就变成了6+1=7
我们再加一个人,把最后一种情况考虑到

5号到达门口需要的最少步数为2+5=7,那么他能不能在第七步时走出车厢呢
答案是不能的,因为前面的1号和4号都需要走六步才能到达出口
1号和4号中必定有一个人会花费7步,这时会与5号的7步相冲突
所以5号又要推迟一步,变成8步
同样的我们再加一个人

6号需要的步数也为7,所以5号又要推迟一步,变为9步
最后我们再把剩余的一个人加上

他的步数为5步,所以不会对结果产生影响
所以样例一的最终答案为9步
代码
知道了思路,下一步就是代码实现了
我们要先处理出每一个人到达出口的最小步数,然后排一下序
最后我们由大到小遍历,如果遇到相同的就把步数往后推一个
需要注意的是,数组要开500*500*2,不要开小了
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=;//数组不要开小了
int r,s,p;
int jl[maxn];
int solve(int bb){
if(bb<=s) return s-bb+;
else return bb-s;
}
int main(){
scanf("%d%d%d",&r,&s,&p);
for(int i=;i<=p;i++){
int aa,bb;
scanf("%d%d",&aa,&bb);
jl[i]=r-aa++solve(bb);//求出每个节点到出口的最小步数
}
sort(jl+,jl++p);//排序
int ans=-,cnt=;
for(int i=;i<=p;i++){
if(jl[i]==cnt || ans>=jl[i]) ans++;
//如果出现相同的或者是当前的最大步数大于等于该节点的步数,步数往后推移一步
//这里的当前的最大步数大于等于该节点的步数说明之前一定遍历到了比jl[i]更小的节点
//而且该节点被遍历了两次及以上,这时我们也需要把ans++
else ans=max(ans,jl[i]);//不相同取较大值
cnt=jl[i];//记录上一个元素
}
printf("%d\n",ans);
return ;
}
Problem C Emergency Evacuation 一道思维题的更多相关文章
- hdu2094—看似拓扑实际上是一道思维题
HDU2094 产生冠军 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2094 题意:中文题,就不解释了.题意已经非常清楚了. 这道题的看起来像是一 ...
- Report,又是一道思维题
题目: Each month Blake gets the report containing main economic indicators of the company "Blake ...
- 一道思维题 &&递归改循环
思路: 比如5 2 12345--> 1245 从3开始,这时候5变成了1.剩下4512,对应1234.只需要找到现在n-1,k中的数对应原来的编号的映射. 比如1-->3 是1+2 mo ...
- CodeForces - 1102A(思维题)
https://vjudge.net/problem/2135388/origin Describe You are given an integer sequence 1,2,-,n. You ha ...
- BZOJ4401: 块的计数 思维题
Description 小Y最近从同学那里听说了一个十分牛B的高级数据结构——块状树.听说这种数据结构能在sqrt(N)的时间内维护树上的各种信息,十分的高效.当然,无聊的小Y对这种事情毫无兴趣,只是 ...
- CodeForces - 631C ——(思维题)
Each month Blake gets the report containing main economic indicators of the company "Blake Tech ...
- 7月15日考试 题解(链表+状压DP+思维题)
前言:蒟蒻太弱了,全打的暴力QAQ. --------------------- T1 小Z的求和 题目大意:求$\sum\limits_{i=1}^n \sum\limits_{j=i}^n kth ...
- 又一道简单题&&Ladygod(两道思维水题)
Ladygod Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- zoj 3778 Talented Chef(思维题)
题目 题意:一个人可以在一分钟同时进行m道菜的一个步骤,共有n道菜,每道菜各有xi个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...
随机推荐
- Redis集群-主从模式
1.架构设计 集群在单台主机上模拟搭建6个节点(3主3从的集群): 2.配置 创建与端口相同的文件夹存储Redis配置文件和持久化文件. 目录如下: 每个节点配置文件如下: 节点1: bind 192 ...
- 网络编程-Netty-Reactor模型
目录 # 摘要 高性能服务器 Reactor模式 Reactor单线程模型设计 Reactor多线程模型设计 主从Reactor多线程模型设计 Netty Reactor模型设计 参考 你的鼓励也是我 ...
- 一次性搞懂 PHP 中面向对象的所有知识点。
OOP是什么? OOP是面向对象编程,面向对象编程是一种计算机编程架构. OOP的基本原则是计算机程序是由单个能起到子程序作用的单元或对象组合而成. 基本概念: 类:定义了事务的抽象特点.包含了数据的 ...
- 如何知道使用的GatewayWorker版本号?
打开GatewayWorker/Gateway.php, 在Gateway类内部VERSION常量标记了当前GatewayWorker的版本,例如下面GatewayWorker版本号为2.0.2. e ...
- NASH:基于丰富网络态射和爬山算法的神经网络架构搜索 | ICLR 2018
论文提出NASH方法来进行神经网络结构搜索,核心思想与之前的EAS方法类似,使用网络态射来生成一系列效果一致且继承权重的复杂子网,本文的网络态射更丰富,而且仅需要简单的爬山算法辅助就可以完成搜索,耗时 ...
- MySQL ORDER BY:对查询结果进行排序
在 MySQL SELECT 语句中,ORDER BY 子句主要用来将结果集中的数据按照一定的顺序进行排序. 其语法格式为: ORDER BY {<列名> | <表达式> | ...
- 容器技术之Docker资源限制
上一篇我们聊到了docker容器的单机编排工具docker-compose的简单使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13121678.html: ...
- 求求你,别问了,Java字符串是不可变的
最近,又有好几个小伙伴问我这个问题:"二哥,为什么 Java 的 String 要设计成不可变的啊?"说实话,这也是一道非常经典的面试题,面试官超喜欢问.我之前写过这方面的文章,现 ...
- 如何 SSH 到 Linux 服务器里的特定目录及执行命令?
你是不是有遇到过这样的场景?使用 SSH 命令进入到服务器,然后再用 cd 命令进入到对应目录,再继续进行你的工作. 这种操作对于新手来讲特别常见,良许之前也是这样.在本文,老司机将带你来进行更高效的 ...
- 布局之: flex(CSS3新增)
flex 基本概念 flex布局(flex是flexible box的缩写), 也称为弹性盒模型 .将属性和属性值(display:flex; )写在哪个标签样式中,谁就是 容器:它的所有子元素自动成 ...