題目敘述
每筆測資第一行有一個正整數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";
}
留言
張貼留言