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个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...
随机推荐
- 阿里云杨敬宇:边缘计算行业通识与阿里云ENS的技术演进之路
近日,阿里云杨敬宇在CSDN阿里云核心技术竞争力在线峰会上进行了<5G基础设施-阿里云边缘计算的技术演进之路>主题演讲,针对5G时代下,行业和技术的趋势.边缘计算产业通识以及阿里云边缘计算 ...
- 洛谷 P1115 最大子序和
**原题链接** ##题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. **解法**: 1.暴力枚举 时间:O(n^3) 2.简单优化 时间:O(n ...
- springmvc无法进入controller,且报错404
今天搭建一个springmvc项目时,前台一直报错404,在controller中调试发现程序没有进入controller. 通过多次刷新前台页面,发现第一次进入是会弹出错误提示,第二次之后就直接40 ...
- 做一个有价值的seoer
什么是SEO就不用在解释了吧,一般来看这篇文章的都是老鸟了,基础的术语解释也啥意义. 从早期的cms建站,到现在的批量镜像站群等操作,似乎搜索引擎现在都下了重手,前几年还好用的方式现在已经不再是那么理 ...
- Java线程池简聊
在Java中,已经实现了4中内置的线程池,这四种我不多聊. 大家各种网站论坛都能查得到. 现在说一下这四种线程池的基类: ThreadPoolExecutor在ThreadPoolExecutor中你 ...
- office2016专业增强版激活密匙 (shell激活版)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_42642945/article/d ...
- webdriver中的等待
强制等待:sleep() 设置固定休眠时间,单位为秒. 由python的time包提供, 导入 time 包后就可以使用. 缺点:不智能,使用太多的sleep会影响脚本运行速度. 隐式等待:impli ...
- Win10 1903小白搭建Redis
一.Redis介绍 Please Baidu. 二.安装 1)下载: 下载网址 https://github.com/microsoftarchive/redis/releases 选这个 2)安装 ...
- 如何从OutLook正确取得定期会议的时间?(待解决)
背景: 用Microsoft.Office.Interop.Outlook取得日历项,然后根据业务要求筛选. 现象: 如果是定期会议,使用AppointmentItem.Start/End取得的是该定 ...
- 【asp.net core 系列】- 11 Service层的实现样板
0.前言 在<asp.net core 系列>之实战系列中,我们在之前的篇幅中对项目有了一个大概的认知,也搭建了一个基础的项目骨架.那么就让我们继续完善这个骨架,让它更加丰满.这一篇,我将 ...