用户:
Ensheeran查看:0 回复:1 评论:0 创建时间:2021-02-21T19:08:13
#include <bits/stdc++.h> using namespace std; // 表示航班的结构体 struct FLIGHT { string flight_name; // 航班名称 int terminal_number; // 登机口 int take_off_time; // 起飞时间 // 重载小于运算符以便排序。排序优先级:登机口(递增),起飞时间(递增)、航班名称(递增) bool operator < (const FLIGHT &f) const { if (terminal_number != f.terminal_number) return terminal_number < f.terminal_number; if (take_off_time != f.take_off_time) return take_off_time < f.take_off_time; return flight_name < f.flight_name; } } flights[10010]; // 解析输入信息 FLIGHT getInfo(string info) { FLIGHT f; istringstream iss(info); string text; iss >> text; iss >> f.flight_name; if (text == "ARRIVAL") { iss >> text; f.terminal_number = stoi(text.substr(1)); iss >> text; f.take_off_time = 60 * stoi(text.substr(0, 2)) + stoi(text.substr(3)); } else if (text == "CHANGE") { iss >> text; f.terminal_number = stoi(text.substr(1)); f.take_off_time = -1; } else { iss >> text; f.terminal_number = -1; f.take_off_time = 60 * stoi(text.substr(0, 2)) + stoi(text.substr(3)); } return f; } int main(int argc, char *argv[]) { cin.tie(0), cout.tie(0), ios::sync_with_stdio(false); int N; cin >> N; cin.ignore(256, '\n'); // 记录航班在数组中的序号 map<string, int> idx; // 读取输入 int cnt = 0; string line; while (getline(cin, line)) { FLIGHT f = getInfo(line); if (line.front() == 'A') { idx[f.flight_name] = cnt++; flights[idx[f.flight_name]] = f; } else if (line.front() == 'C') { flights[idx[f.flight_name]].terminal_number = f.terminal_number; } else { flights[idx[f.flight_name]].take_off_time = f.take_off_time; } } // 按规则排序 sort(flights, flights + cnt); // 查找符合要求的登机口 int last_terminal_number = -1, flight_count = 0, max_flight_count = 0, max_terminal_number = -1; for (int i = 0; i < cnt; i++) { if (flights[i].terminal_number != last_terminal_number) { if (flight_count > max_flight_count) { max_terminal_number = last_terminal_number; max_flight_count = flight_count; } flight_count = 1; last_terminal_number = flights[i].terminal_number; } else flight_count++; } if (flight_count > max_flight_count) { max_terminal_number = last_terminal_number; max_flight_count = flight_count; } // 输出 cout << 'T' << max_terminal_number << '\n'; for (int i = 0; i < cnt; i++) if (flights[i].terminal_number == max_terminal_number) cout << flights[i].flight_name << '\n'; return 0; }