[21년 재직자 대회 예선] 회의실 예약
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<unordered_map>
using namespace std;
int main(int argc, char** argv)
{
int N, M;
cin >> N >> M;
string input;
vector<string> name;
for (int i = 0; i < N; i++) {
cin >> input;
name.push_back(input);
}
sort(name.begin(), name.end());
unordered_map<string, int> umap;
for (int i = 0; i < N; i++) {
umap[name[i]] = i;
}
int s, t;
int table[50][9] = { 0, };
for (int i = 0; i < M; i++) {
cin >> input >> s >> t;
for (int j = s - 9; j < t - 9; j++) {
table[umap[input]][j] = 1;
}
}
for (int i = 0; i < N; i++) {
vector<string> available;
if (table[i][0] == 0) {
available.push_back("09");
}
for (int j = 0; j < 8; j++) {
if (table[i][j] ^ table[i][j + 1]) {
available.push_back(to_string(j + 10));
}
}
if (available.size() % 2) {
available.push_back("18");
}
cout << "Room " << name[i] << ":\n";
if (available.size() == 0) {
cout << "Not available\n";
}
else {
cout << available.size() / 2 << " available:\n";
}
for (int i = 0; i < available.size(); i += 2) {
cout << available[i] << "-" << available[i + 1] << "\n";
}
if (i == N - 1) break;
cout << "-----\n";
}
return 0;
}