首页 > 其他 > 详细

【贪心】Emergency Evacuation

时间:2020-04-11 17:33:09      阅读:61      评论:0      收藏:0      [点我收藏+]

题目

技术分享图片

技术分享图片

 

大致题意

把指定的人从同一出口送出车外,且同一位置不能同时有两个人,求所需的最短时间。

分析

第一感觉就是利用贪心思想解决问题,但是这道题的数据范围用模拟的话肯定是会爆掉的,所以这是不可取的。
我们可以反过来想,把所有人从出口送回原位,然后根据距离进行降序排序,离出口远的人先进,其他人后进,这样就能使时间最小化,得出最优解。

代码

#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include<queue>
#include<stack>
#include<vector>
#include<map>
using namespace std;


struct per{
  int r,c;//原位置
  int d;//原位置离出口的距离
};
struct per pe[500005];

bool cmp(struct per a,struct per b){
    return a.d>b.d;
}

int main(){
    int r,s,p,i;
    cin>>r>>s>>p;
    for(i=0;i<p;i++)    {
        cin>>pe[i].r>>pe[i].c;
        if(pe[i].c>s)
            pe[i].d=(pe[i].c-s)+(r-pe[i].r+1);
        else
            pe[i].d=(s-pe[i].c+1)+(r-pe[i].r+1);
    }
    sort(pe,pe+p,cmp);
    int k=1;//在队列中等待进入车厢的时间
    int maxtime=pe[0].d;
    for(i=1;i<p;i++){
        if(pe[i].d+k>maxtime)
            maxtime=pe[i].d+k;
        k++;
    }
    cout<<maxtime<<endl;
    return 0;
}

 

 

【贪心】Emergency Evacuation

原文:https://www.cnblogs.com/Vocanda/p/12679859.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!