SOJ 1027 MJ,Nowhere to Hide

题目大意:输入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;
}

 

posted @ 2015-09-23 20:23  MchCyLh  阅读(129)  评论(0编辑  收藏  举报