The Japanese government plans to increase the number of inbound tourists to forty million in the year 2020, and sixty million in 2030. Not only increasing touristic appeal but also developing

tourism infrastructure further is indispensable to accomplish such numbers.

One possible enhancement on transport is providing cars extremely long and/or wide, carrying many passengers at a time. Too large a car, however, may require too long to evacuate all

passengers in an emergency. You are requested to help estimating the time required.

The car is assumed to have the following seat arrangement.

  • A center aisle goes straight through the car, directly connecting to the emergency exit

    door at the rear center of the car.
  • The rows of the same number of passenger seats are on both sides of the aisle.

    A rough estimation requested is based on a simple step-wise model. All passengers are initially

    on a distinct seat, and they can make one of the following moves in each step.
  • Passengers on a seat can move to an adjacent seat toward the aisle. Passengers on a seat

    adjacent to the aisle can move sideways directly to the aisle.
  • Passengers on the aisle can move backward by one row of seats. If the passenger is in front of the emergency exit, that is, by the rear-most seat rows, he/she can get off the car.

The seat or the aisle position to move to must be empty; either no other passenger is there before the step, or the passenger there empties the seat by moving to another position in the

same step. When two or more passengers satisfy the condition for the same position, only one of them can move, keeping the others wait in their original positions.

The leftmost figure of Figure C.1 depicts the seat arrangement of a small car given in Sample Input 1. The car have five rows of seats, two seats each on both sides of the aisle, totaling twenty. The initial positions of seven passengers on board are also shown.

The two other figures of Figure C.1 show possible positions of passengers after the first and the second steps. Passenger movements are indicated by fat arrows. Note that, two of the passengers in the front seat had to wait for a vacancy in the first step, and one in the second row had to wait in the next step.

Your task is to write a program that gives the smallest possible number of steps for all the passengers to get off the car, given the seat arrangement and passengers’ initial positions.

输入格式

The input consists of a single test case of the following format.

put consists of a single test case of the following format.

\(
r\ s\ p\\
i_1\ j_1\\
.\\
.\\
.\\
i_p\ j_p\\
\)

Here, \(r\) is the number of passenger seat rows, \(s\) is the number of seats on each side of the aisle, and \(p\) is the number of passengers. They are integers satisfying \(1 \le r \le 500, 1 \le s \le 500\), and \(1 \le p \le 2rs\).

The following \(p\) lines give initial seat positions of the passengers. The k-th line with ik and \(jk\) means that the k-th passenger’s seat is in the ik-th seat row and it is the jk-th seat on that row.

Here, rows and seats are counted from front to rear and left to right, both starting from one.

They satisfy \(1 \le ik \le r\) and \(1 \le jk \le 2s\). Passengers are on distinct seats, that \(i_s, i_k \ne i_l\) or \(j_k \ne j_l\) holds if \(k \ne l\).

输出格式

The output should be one line containing a single integer, the minimum number of steps required for all the passengers to get off the car.

样例输入1

5 2 7
1 1
1 2
1 3
2 3
2 4
4 4
5 2

样例输出1

9

样例输入2

500 500 16
1 1
1 2
1 999
1 1000
2 1
2 2
2 999
2 1000
3 1
3 2
3 999
3 1000
499 500
499 501
499 999
499 1000

样例输出2

1008

题解

这个题还有点绕,但是想通了之后就简单了

首先假设不会有人挡住别人,这样很容易求出来每个人的时间,但是这时候就会发现,会有人一起到达出口,而假设实际上是不成立的,所以需要依次延后.

比如某个时间有3个人同时到达了出口,那么这一秒只能有一个人出去,而剩下的两个人只能再接下来的两秒出去.

这又遇到一个问题,如果这两个人等待的时候,后面又有人被堵了,怎么办?只能继续延后,这样延后到都出去.

如果真的是一个一个出去的话,显然答案就是人数,但是实际上可能又空缺,而这个空缺数量也不难算,当出口出现堵塞的时候,看看最后延后到哪里,如果从现在到堵塞结束的时间都没有人到达出口,就出现了空缺.

把接下来第一个到达出口的时间和堵塞结束的时间相减,就得出了空缺大小,人数加上总的空缺大小,就是最后的答案

代码

#include <cstdio>
#define max(a, b) ((a) > (b) ? (a) : (b))
int cnt[2010], r, s, p, y, x, last, ans;
int main() {
scanf("%d%d%d", &r, &s, &p);
for (int i = 1; i <= p; i++) {
scanf("%d%d", &y, &x);
cnt[max(s - x + 1, x - s) + r - y + 1]++; // 下标是时间,记录这个时间有多少人到达出口(若人不挡人)
}
for (int i = 1; i < 2010; i++)
if (cnt[i])
if (last >= i - 1) // last是堵塞结束的时间
last = cnt[i] + last; // 继续延后
else {
ans += i - last - 1; // 记录空缺
last = i - 1 + cnt[i]; // 更新last
}
printf("%d", ans + p);
return 0;
}

Emergency Evacuation 题解的更多相关文章

  1. ICPC 2018 亚洲横滨赛 C Emergency Evacuation(暴力,贪心)

    ICPC 2018 亚洲横滨赛 C Emergency Evacuation 题目大意 你一个车厢和一些人,这些人都坐在座位上,求这些人全部出去的时间最小值 Solution 题目咋说就咋做 直接模拟 ...

  2. Emergency Evacuation,题解

    题目: 题意: 在某一秒,每个人可以进行一个移动:去旁边座位,去过道,在过道向出口走,求最少多少秒可以让所有人离开(具体如图和样例). 分析: 首先,我们先考虑简单的,只考虑出口前有什么事件发生:1. ...

  3. POJ 3057 Evacuation 题解

    题目 Fires can be disastrous, especially when a fire breaks out in a room that is completely filled wi ...

  4. codeforces gym #102082C Emergency Evacuation(贪心Orz)

    题目链接: https://codeforces.com/gym/102082 题意: 在一个客车里面有$r$排座位,每排座位有$2s$个座位,中间一条走廊 有$p$个人在车内,求出所有人走出客车的最 ...

  5. POJ3057:Evacuation——题解

    http://poj.org/problem?id=3057 题目大意: .为人,D为门,X为障碍,门每秒只能出去一个人,问多少秒出光. 如果无法出光输出impossible. ——————————— ...

  6. Emergency Evacuation(最短下车时间)———(思维)

    题意: 给你一个车厢和一些人的位置,这些人都坐在座位上,求这些人全部出去的时间最小值. 注意: 有许多行座位,且每行关于过道对称,出口在过道一端,一个时间只能移动一个单位,且每时刻每个格子只能有一人 ...

  7. 【贪心】Emergency Evacuation

    题目 大致题意 把指定的人从同一出口送出车外,且同一位置不能同时有两个人,求所需的最短时间. 分析 第一感觉就是利用贪心思想解决问题,但是这道题的数据范围用模拟的话肯定是会爆掉的,所以这是不可取的.我 ...

  8. Problem C Emergency Evacuation 一道思维题

    题目描述 输入 输出 样例 样例输入 样例输入一 样例输入二 样例输出 样例输出一 9 样例输出二 1008 一句话题意:给你一个车厢和一些人,这些人都坐在座位上,求这些人全部出去的时间最小值. 分析 ...

  9. 【贪心算法】CF Emergency Evacuation

    题目大意 vjudge链接 给你一个车厢和一些人,这些人都坐在座位上,求这些人全部出去的时间最小值. 样例1输入 5 2 71 11 21 32 32 44 45 2 样例1输出 9 样例2输入 50 ...

随机推荐

  1. 曹工说JDK源码(2)--ConcurrentHashMap的多线程扩容,说白了,就是分段取任务

    前言 先预先说明,我这边jdk的代码版本为1.8.0_11,同时,因为我直接在本地jdk源码上进行了部分修改.调试,所以,导致大家看到的我这边贴的代码,和大家的不太一样. 不过,我对源码进行修改.重构 ...

  2. 搭建手机web服务器-----内网穿透(无需Root)

    搭建手机web服务器-----内网穿透(无需Root) 一.内网穿透部分 前言: 网上内网穿透的方法很多,像花生壳.Ngrok.Frp等等,但是大多都需要获取手机root权限 本文使用的软件是Term ...

  3. [转载]win&office 激活教程,详细

    因为可能的版权&法律问题, 我也为了自我保全哈~ 不能直接转原文,详见官方文档 https://v0v.bid/kms.html https://v0v.bid 任何问题请联系作者 欢迎分享

  4. Django自定义500的错误显示信息

    这个方法应该对Django version 2.2.4以后的版本都有效,因为我的项目是这个版本,其他版本我并没有测试. 首先找到Django的exception.py文件路径:  C:\python_ ...

  5. pip安装mysql-connector

    pip install mysql-connector --index-url https://pypi.douban.com/simple

  6. Probius:一个功能强大的自定义任务系统

    断更的这些日子,我又折腾了一个轮子,文末参考源码 大约在一年半以前写过一篇文章『探秘varian:优雅的发布部署程序』,里边有讲到我们采用类似lego的模块化方式来构建CICD的流程,虽能满足我们的需 ...

  7. cb29a_c++_STL_算法_查找算法_(2)search_n

    cb29a_c++_STL_算法_查找算法_(2)search_n//比如:连续查找连续的n个8search_n(b,e,c,v),迭代器b,begin(),e,end().连续的c个vpos=sea ...

  8. k8s的两种网络方案与多种工作模式[flannel与calico]

    k8s的两种网络方案与多种工作模式 1. Flannel: flannel有三种工作模式: 1. vxlan(隧道方案) 2. host-gw(路由方案) 2. udp(在用户态实现的数据封装解封装, ...

  9. docker镜像瘦身思路

    docker镜像瘦身思路 一.简介 docker镜像太大,带来了以下几个问题: 存储开销 这块影响其实不算很大,因为对服务器磁盘来说,15GB的存储空间并不算大,除非用户服务器的磁盘空间很紧张 部署时 ...

  10. Java 中的线程 thread

    一.问:线程有哪些状态? new, runnable, running, waiting, dead 线程状态间的流转 二.问:线程实现方式? 实现 Runnable 接口,然后new Thread, ...