📜  可提供停站的最大列车数

📅  最后修改于: 2021-10-25 11:27:48             🧑  作者: 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

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。