题目大意:输入n行(id, ip)对,对同一个ip,第一次出现的ip对应的id为Main_ID, 第二次出现的ip对应的id为MJ_ID, 输出n / 2个(Main_ID, MJ_ID)对,输出格式为 MJ_ID is the MaJia of Main_ID,输出按Main_ID的字典序输出。当n为0时,输入结束。
解题思路:这是一种映射问题,用数据结构map非常合适。每次读入(id, ip) 对,检查map中是否已存在键值为ip的键,若不存在,则插入(id, ip)对,若存在则存放到结果映射表中。
最后遍历结果映射表输出答案。
代码如下:
#include <iostream> #include <map> #include <string> using namespace std; int main() { int n; while (cin >> n, n) { map<string, string> m; map<string, string> ans; string id, ip; for (int i = 0; i < n; i++) { cin >> id >> ip; if (m.find(ip) == m.end()) { m[ip] = id; } else { ans[m[ip]] = id; } } map<string, string>::iterator iter = ans.begin(); while (iter != ans.end()) { cout << iter->second << " is the MaJia of " << iter->first << endl; iter++; } cout << endl; } return 0; }
时间: 2024-10-10 07:21:51