ZeroJudge F731: 老鼠的直播間

題目敘述

每筆測資第一行有一個正整數N,接下來會有N行,每行會有兩個正整數A和B,A代表這個人從時間A進入直播間,B代表這個人在時間B離開直播間。要求輸出直播間最高同時有幾個人在觀看。


範例輸入 #1

3

1 3

5 6

2 4

範例輸出 #1

2


解題思路

將進入時間跟出來時間存在不同的陣列中並排序,再來跑進入時間的For迴圈,每次人數+1,然後裡面再跑一個出來時間的For迴圈,需要有一個Start的變數 (預設為0),從Start這個位置開始判斷,如果出來的時間小於現在的進來時間,那人數就-1,直到跑到出來時間大於進來時間了才把出來時間的For迴圈Break掉,然後在這邊再判斷最大值。最後輸出得到的最大值即可。

解題程式碼如下 (僅供參考):

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N;
    cin >> N;
    vector<int>in;
    vector<int>out;
    for (int i = 0; i<N; i++)
    {
        int a, b;
        cin >> a >> b;
        in.push_back(a);
        out.push_back(b);
    }
    sort(in.begin(), in.end());
    sort(out.begin(), out.end());
    int people = 0, start = 0, max = -999;
    for (int i = 0; i<N; i++)
    {
        people++;
        for (int j = start; j<N; j++)
        {
            if (out[j] > in[i])
            {
                start = j;
                break;
            }
            people--;
        }
        if (people > max) max = people;
    }
    cout << max << "\n";
}

留言