題目: UVa - 10282 - Babelfish

題目說明

給動物名稱及對應的叫聲,依據叫聲輸出對應的動物名稱。

Input: 測資分為兩部分,前面的部分每一行會有兩個字串,分別代表動物名稱及叫聲,中間以空格隔開。後面的部分為動物的叫聲,兩部分中間以空行隔開。

Output: 根據測資前面的部分輸出叫聲對應的動物,若是沒有在前面出現過則輸出 “eh”。

解題思路

使用 Unordered_map 建立叫聲及動物名稱的映射即可。使用 getline() 以行為單位讀取資料,讀取後先判斷,若為空代表前半部分讀取完畢,否則使用 String 中的 find() 找到空格的 index,將字串分為兩部分,以叫聲為 key,名稱為 val,建立映射即可,當前半部分讀取完後開始讀取叫聲,先判斷這種叫聲是否出現過,若出現過直接輸出名稱即可,否則輸出 “eh”。

參考解法

c++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <string>
#include <unordered_map>

using namespace std;

// fast IO
static auto __ = []()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
return 0;
}();

int main()
{
string key, val;
unordered_map<string, string> m;

while (getline(cin, val))
{
if (val.empty()) break;
int idx = val.find(' ');
key = val.substr(idx + 1, val.length() - idx);
val.erase(idx);
m[key] = val;
}
while (getline(cin, key))
{
if (key.empty()) break;
m.count(key) ? cout << m[key] << '\n' : cout << "eh\n";
}
}