zoukankan      html  css  js  c++  java
  • 【贪心】Emergency Evacuation

    题目

    大致题意

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

    分析

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

    代码

    #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;
    }
  • 相关阅读:
    Spring 配置数据源的几种方式
    Java List 数据操作
    javascript 数组方法解析
    jQuery 获取页面元素的属性值
    表格列排序
    优秀资源的收集
    Java 集合介绍
    二进制、八进制、十进制、十六进制的转换
    Nginx配置
    Nginx安装
  • 原文地址:https://www.cnblogs.com/Vocanda/p/12679859.html
Copyright © 2011-2022 走看看