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个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...
随机推荐
- 全面概述Gitee和GitHub生成/添加SSH公钥
前言 现如今将代码开源已经成为软件开发行业的一种趋势,而现在比较有名的代码托管平台有GItHub.Gitee.Gitlab等相关平台.而我们在使用代码托管平台最为常见的就是如何将自己本地的代码推送到远 ...
- Elasticsearch 别管原理,先run起来
少点代码,多点头发 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles 看文章有两点需要注意: 本公 ...
- 【Jmeter】日常骚操作最简洁上传和下载
上传文件或图片 第一步:正常填写域名地址,请求头及路径(此处不过多讲解) 第二步:http请求中,高级设置——Implementation(翻译:实现)值选择修改为:java 第三步:查看结果树请求成 ...
- 如何在centos7安装dnf软件包
想在自己的笔记本CentOS7上安装dnf玩玩儿,但是根据百度出来的方法没有成功. yum install epel-release -y yum install dnf 现在将解决办法转载过来,如下 ...
- 如何在react中使用decorator
2020-03-27 如何在react中使用decorator decorator目前都需要修改babel才能使用 说一下具体的操作方法 踩了一天的坑... 步骤1: yarn create reac ...
- Python语言基础-语法特点、保留字与标识符、变量、基本数据类型、运算符、基本输入输出、Python2.X与Python3.X区别
Python语言基础 1.Python语法特点 注释: 单行注释:# #注释单行注释分为两种情况,例:第一种#用于计算bim数值bim=weight/(height*height)第二种:bim=we ...
- laravel clone后需要做的操作
首先 安装依赖关系 composer install 第二步 复制配置文件 cp .env.example .env 第三步 创建新的应用程序密钥 php artisan key:generate 第 ...
- Python爬虫小白入门(七)爬取豆瓣音乐top250
抓取目标: 豆瓣音乐top250的歌名.作者(专辑).评分和歌曲链接 使用工具: requests + lxml + xpath. 我认为这种工具组合是最适合初学者的,requests比pytho ...
- Java对象转换Json的细节处理
一.fastJson 1.fastJson在转换java对象为json的时候,默认是不序列化null值对应的key的 也就是说当对象里面的属性为空的时候,在转换成json时,不序列化那些为null值的 ...
- Linux下,如何监控某个进程到底向哪个地址发起了网络调用
Linux下,如何监控某个进程到底向哪个地址发起了网络调用 有时候,有些应用,比如idea,你发起某个操作时,其底层会去请求网络,获取一些数据. 但是不知道,请求了什么地址.举个例子,在idea中,m ...