公式
D - 会議室の予約 / Meeting Room Reservation 解説
by
D - 会議室の予約 / Meeting Room Reservation 解説
by
kyopro_friends
答えは同時開催される会議の数の最大値となります。
なぜなら、その個数の会議室が用意されているとき、時系列順に会議の開催をシミュレーションすることを考えると、どの会議も会議開始時に必ず空いている会議室が存在し、その会議室を使えば良いためです。
同時に開催される会議の数は、時刻順に「会議の開始」「会議の終了」をシミュレーションすることで求めることができます。計算量は \(O(N\log N)\) です。
実装例 (C++)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
vector<pair<int,int>>events;
for(int i=0; i<n; i++){
int s, e;
cin >> s >> e;
events.push_back({s, 1});
events.push_back({e, -1});
}
sort(events.begin(), events.end());
int ans = 0;
int crr = 0;
for(auto[_, d]: events){
crr += d;
ans = max(ans, crr);
}
cout << ans << endl;
}
実装例 (Python)
N = int(input())
events = []
for _ in range(N):
s, e = map(int,input().split())
events.append((s, 1))
events.append((e, -1))
events.sort()
ans = 0
crr = 0
for _, d in events:
crr += d
ans = max(ans, crr)
print(ans)
