I - Misha and Changing Handles

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiyaozhe/article/details/81081568

I - Misha and Changing Handles

题目链接: Misha and Changing Handles

题目概述:输入n行。每行包括两个string。设第一个为用户的oldName,第二个为用户的newName,用newName 替换旧的oldName,可进行重复替换。最后输出用户的第一个Name 和最新的Name。

举例:

Input:
“`
5
Misha ILoveCodeforces
Vasya Petrov
Petrov VasyaPetrov123
ILoveCodeforces MikeMirzayanov
Petya Ivanov

Output:

3
Petya Ivanov
Misha MikeMirzayanov
Vasya VasyaPetrov123


解题思路:利用 Map 结构。特殊的小技巧是用 newName 作为 key,oldName 作为 value。每次输入会有两种情况,一是 Map 中不存在该用户,直接 `names[newName] = oldName`插入该用户;二是 Map 已存在该用户,此时读取到的 oldName 即为上一次输入的newName,因此先` names[newName] = names[oldName]`插入新的信息,在`names.erase(oldName)` 删除旧信息


---

最终代码:

``` c++




<div class="se-preview-section-delimiter"></div>

#include <iostream>




<div class="se-preview-section-delimiter"></div>

#include <map>




<div class="se-preview-section-delimiter"></div>

#include <string>

using namespace std;

int main()
{
    map<string,string> names;
    int q=0;
    string oldName,newName;
    while(cin>>q){
        for(int i = 0; i < q; i++)
        {
            cin>> oldName>>newName;

            if(names.count(oldName)==0){
                names[newName] = oldName;
            }else{
                names[newName] = names[oldName];
                names.erase(oldName);
            }

        }
        cout << names.size() <<endl;
        for(map<string,string>::iterator it=names.begin(); it != names.end(); it++)
        {
            cout<< it->second << ' '<< it->first << endl;
        }
        names.clear();
    }
}

猜你喜欢

转载自blog.csdn.net/xiyaozhe/article/details/81081568
今日推荐