【贪心】Emergency Evacuation

题目

【贪心】Emergency Evacuation_第1张图片

【贪心】Emergency Evacuation_第2张图片

 

大致题意

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

分析

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

代码

#include 
#include 
#include 
#include 
#include 
#include
#include
#include
#include
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)    {
        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){
        if(pe[i].d+k>maxtime)
            maxtime=pe[i].d+k;
        k++;
    }
    cout<endl;
    return 0;
}

 

 

你可能感兴趣的:(【贪心】Emergency Evacuation)