抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

总时间限制: 3000ms 内存限制: 65536kB

描述

你旅游到了一个国外的城市。那里的人们说的外国语言你不能理解。不过幸运的是,你有一本词典可以帮助你。

输入

首先输入一个词典,词典中包含不超过 100000 个词条,每个词条占据一行。每一个词条包括一个英文单词和一个外语单词,两个单词之间用一个空格隔开。而且在词典中不会有某个外语单词出现超过两次。词典之后是一个空行,然后给出一个由外语单词组成的文档,文档不超过 100000 行,而且每行只包括一个外语单词。输入中出现单词只包括小写字母,而且长度不会超过 10。

输出

在输出中,你需要把输入文档翻译成英文,每行输出一个英文单词。如果某个外语单词不在词典中,就把这个单词翻译成 “eh”。

样例输入

1
2
3
4
5
6
7
8
9
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay

atcay
ittenkay
oopslay

样例输出

1
2
3
cat
eh
loops

提示

输入比较大,推荐使用 C 语言的 I / O 函数。

来源

翻译自 Waterloo local 2001.09.22 的试题

分析

  1. 这道题属于检索问题。
  2. 假如有一种数据结构能使查找的时间复杂度为 O(1)O(1),那就很好了。

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>

using namespace std;

int main() {
string s;
unordered_map<string, string> mp;
while (1) {
getline(cin, s);
if(s == "") break;
int i = 0;
for(; i < s.size(); i++) if(s[i] == ' ') break;
mp[s.substr(i+1, s.size())] = s.substr(0, i);
}
while(cin >> s) {
if(mp.count(s) == 0) {
printf("eh\n");
} else {
cout << mp[s] << endl;
}
}
}