题目描述
你现在有一位新图论教授,你觉得他讲课讲的很好,但他说话实在是太快了,搞得你根本没有时间记笔记。所以呢,你有一个计划来跟上他讲课时的“脚步”,并记下重要的笔记。
你总共会两种语言:A 语言和 B 语言,教授用来讲课的是其中的 A 语言。A 语言和 B 语言有以下共同点:
- 它们都由若干小写字母构成;
- 每个单词里都不包括空格;
- 它们的长度都不超过 10。
另外,可以保证同一种语言中任意两个单词都有不同的拼写,且 A 语言的每一个单词与 B 语言中的每一个单词一一对应。
你的做笔记方式如下:
- 你必须写出写出教授给出的每一个单词;
- 为保证写单词用时最短,你必须要选择两种语言中单词长度更短的一个;
- 如果两个单词的长度一样,为保证讲课的原汁原味,你会选择第一种语言来做笔记。
我们会给你教授的演讲。而你呢,需要编一个程序来写出你的笔记。
输入描述
第一行包括两个整数,分别为教授的演讲里有多少个单词的 nn,还有两种语言中共有多少词汇的 mm(1≤n≤30001≤n≤3000,1≤m≤30001≤m≤3000)
接下来有 mm 行,每行两个单词,分别为 aiai 和 bibi(两种语言里的单词)
最后一样中有 nn 个单词,代表教授的演讲。
输出描述
输出 nn 个单词,代表按照题目中的规则你记下的笔记。
样例输入
4 3 codeforces codesecrof contest round letter message codeforces contest letter contest
样例输出
codeforces round letter round
提示
解题关键:C++中map的应用
#include<iostream>
#include<string>
#include<map>
#include<set>
using namespace std;
int main()
{
map<string,string>arr;
int n,m;
cin>>n>>m;
string str;
for(int i=0;i<m;i++){
string s1,s2;
cin>>s1>>s2;
arr[s1]=s2;
}
for(int i=0;i<n;i++){
cin>>str;
if(str.length()<=arr[str].length()){
cout<<str<<" ";
}
else{
cout<<arr[str]<<" ";
}
}
return 0;
}