zoukankan      html  css  js  c++  java
  • [离散化]人潮最多的時段( Interval Partitioning Problem )

    範例:人潮最多的時段( Interval Partitioning Problem )

    一群訪客參加宴會,我們詢問到每一位訪客的進場時刻與出場時刻,請問宴會現場擠進最多人的時段。

    換個角度想,想像會場門口裝著一支監視器。有訪客進入,會場就多一人;有訪客離開,會場就少一人。如此就很容易統計會場人數。遞增的標的是時刻,而不是訪客。

    【註:這個技巧在中文網路上暱稱為「離散化」。】

     
    1. struct Guest {int arrival, leave;} g[10];
    2.  
    3. bool cmp(const int& i, const int& j)
    4. {
    5.     return abs(i) < abs(j);
    6. }
    7.  
    8. void maximum_guest()
    9. {
    10.     vector<int> time;
    11.     for (int i=0; i<10; ++i)
    12.     {
    13.         time.push_back(+g[i].arrival);
    14.         time.push_back(-g[i].leave);
    15.     }
    16.  
    17.     sort(time.begin(), time.end(), cmp);
    18.  
    19.     int n = 0, maximum = 0;
    20.     for (int i=0; i<time.size(); ++i)
    21.     {
    22.         if (time[i] >= 0)
    23.             n++;
    24.         else
    25.             n--;
    26.  
    27.         maximum = max(maximum, n);
    28.     }
    29.     cout << "人潮最多的時段有" << maximum << "人";
    30. }

    此處僅找出人數。找出人潮最多的時段,就留給各位自行嘗試吧。

    UVa 688 972 10613 10585 10963

    UVa 308 837

    参考:usaco 1.2.1 注意地点:某时刻同时有人来与人走

  • 相关阅读:
    Map
    Collection接口之Set
    Collection接口之List、泛型
    简介
    递归
    File类
    转换流InputStreamReader、OutputStreamWriter
    springmvc
    集合
    SpringCloud学习笔记
  • 原文地址:https://www.cnblogs.com/nbalive2001/p/4898745.html
Copyright © 2011-2022 走看看