版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
}
}