码迷,mamicode.com
首页 > 其他好文 > 详细

SOJ 1027 MJ,Nowhere to Hide

时间:2015-09-23 21:17:56      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

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

 

SOJ 1027 MJ,Nowhere to Hide

标签:

原文地址:http://www.cnblogs.com/mchcylh/p/4833424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!