📜  可以提供停车的最大列车

📅  最后修改于: 2021-05-06 20:11:51             🧑  作者: Mango

我们给了n平台和两个主要运行的两个方向的铁路轨道。需要在您的站点停靠的火车必须在一个平台上停下来,而无需在您的站点停靠的火车将通过其中一条主轨道逃逸而不会停下来。现在,每列火车具有三个值:第一到达时间,第二出发时间和第三要求的站台号。我们为您提供了此类列车,您必须告诉他们可以在您的车站提供停车的最大列车数量。

例子:

Input : n = 3, m = 6 
Train no.|  Arrival Time |Dept. Time | Platform No.
    1    |   10:00       |  10:30    |    1
    2    |   10:10       |  10:30    |    1
    3    |   10:00       |  10:20    |    2
    4    |   10:30       |  12:30    |    2
    5    |   12:00       |  12:30    |    3
    6    |   09:00       |  10:05    |    1
Output : Maximum Stopped Trains = 5
Explanation : If train no. 1 will left 
to go without stoppage then 2 and 6 can 
easily be accommodated on platform 1. 
And 3 and 4 on platform 2 and 5 on platform 3.

Input : n = 1, m = 3
Train no.|Arrival Time|Dept. Time | Platform No.
    1    | 10:00      |  10:30    |    1
    2    | 11:10      |  11:30    |    1
    3    | 12:00      |  12:20    |    1
           
Output : Maximum Stopped Trains = 3
Explanation : All three trains can be easily
stopped at platform 1.

如果仅从一个平台开始,那么我们将有1个平台以及一些火车及其到达时间和出发时间,我们必须最大化该平台上的火车数量。此任务类似于“活动选择问题”。因此,对于n个平台,我们将简单地制作n个向量,并根据平台编号将相应的火车放在这些向量中。之后,通过使用贪婪方法,我们可以轻松解决此问题。
注意:我们将以4位整数的形式输入到达和离开的时间,因为1030将代表10:30,以便我们可以轻松处理数据类型。
同样,我们将选择一个二维数组作为arr [m] [3]作为输入,其中arr [i] [0]表示到达时间,arr [i] [1]表示出发时间,arr [i] [2]表示第i列火车的平台。

// CPP to design platform for maximum stoppage
#include 
using namespace std;
  
// number of platforms and trains
#define n 2
#define m 5
  
// function to calculate maximum trains stoppage
int maxStop(int arr[][3])
{
    // declaring vector of pairs for platform
    vector > vect[n + 1];
  
    // Entering values in vector of pairs
    // as per platform number
    // make departure time first element 
    // of pair
    for (int i = 0; i < m; i++)
        vect[arr[i][2]].push_back(
             make_pair(arr[i][1], arr[i][0]));
  
    // sort trains for each platform as per
    // dept. time
    for (int i = 0; i <= n; i++)
        sort(vect[i].begin(), vect[i].end());
      
    // perform activity selection approach
    int count = 0;
    for (int i = 0; i <= n; i++) {
        if (vect[i].size() == 0)
            continue;
  
        // first train for each platform will
        // also be selected
        int x = 0;
        count++;
        for (int j = 1; j < vect[i].size(); j++) {
            if (vect[i][j].second >=
                             vect[i][x].first) {
                x = j;
                count++;
            }
        }
    }
    return count;
}
  
// driver function
int main()
{
    int arr[m][3] = { 1000, 1030, 1,
                      1010, 1020, 1,
                      1025, 1040, 1,
                      1130, 1145, 2,
                      1130, 1140, 2 };
    cout << "Maximum Stopped Trains = "
         << maxStop(arr);
    return 0;
}

输出:

Maximum Stopped Trains = 3