Emergency Evacuation 思维

Posted ghosh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Emergency Evacuation 思维相关的知识,希望对你有一定的参考价值。

技术图片

技术图片

技术图片

题意:一辆车,分成两侧,中间有一条直接到车尾的通道,通道两边分别有r排,s列座位,人们要从座位上移动到通道,再到车尾,每次移动1个单位用1的时间,问所有人都离开车的时间。如果一个人从座位移动到通道,如果相邻的通道的位置上有人,座位上的人无法通过,必须等到这个位置没人时才能过。

分析:这个题如果从正面想的话,很难想出一个策略。所以可以转换成从车尾的人移动到各自座位的时间。

    我们让距离车尾远的先走,这样可以保证时间最少。

 

技术图片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 2 * 500 * 500 + 5;
 4 struct Node{
 5     int r, s, dis;
 6 }a[maxn];
 7 int cmp(Node a, Node b){
 8     return  a.dis > b.dis;
 9 }
10 int r, s, p;
11 int main(){
12     scanf("%d%d%d", &r, &s, &p);
13     for (int i = 1; i <= p; i++){
14         scanf("%d%d", &a[i].r, &a[i].s);
15         if (a[i].s <= s)a[i].dis = r - a[i].r + 1 + s - a[i].s+ 1;
16         else a[i].dis = r - a[i].r + 1 + a[i].s - s;
17     }
18     int k = 1, t = a[1].dis;
19     sort(a + 1, a + 1 + p, cmp);
20     for (int i = 2; i <= p; i++){
21         t = max(t, a[i].dis + k);
22         k++;
23     }
24     cout << t;
25     return 0;
26 }
View Code

 

以上是关于Emergency Evacuation 思维的主要内容,如果未能解决你的问题,请参考以下文章

Emergency Evacuation(贪心)

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

题解 poj3057 Evacuation

POJ 3057 Evacuation (二分匹配)

Evacuation (二分图)

Evacuation (二分图)