Bailian2804 詞典【map+字典樹】
阿新 • • 發佈:2018-11-22
2804:詞典
描述
你旅遊到了一個國外的城市。那裡的人們說的外國語言你不能理解。不過幸運的是,你有一本詞典可以幫助你。
輸入
首先輸入一個詞典,詞典中包含不超過100000個詞條,每個詞條佔據一行。每一個詞條包括一個英文單詞和一個外語單詞,兩個單詞之間用一個空格隔開。而且在詞典中不會有某個外語單詞出現超過兩次。詞典之後是一個空行,然後給出一個由外語單片語成的文件,文件不超過100000行,而且每行只包括一個外語單詞。輸入中出現單詞只包括小寫字母,而且長度不會超過10。
輸出
在輸出中,你需要把輸入文件翻譯成英文,每行輸出一個英文單詞。如果某個外語單詞不在詞典中,就把這個單詞翻譯成“eh”。
樣例輸入
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay
atcay
ittenkay
oopslay
樣例輸出
cat
eh
loops
提示
輸入比較大,推薦使用C語言的I / O函式。
來源
翻譯自Waterloo local 2001.09.22的試題
問題連結:Bailian2804 詞典
問題描述:(略)
問題分析:
這個問題與參考連結是同一題。有2種解法,一是使用STL的map,二是使用字典樹。用同樣的程式碼,前一種解法程式AC了,而後一種程式出現RE。
程式說明:(略)
參考連結:POJ2503 UVA10282 Babelfish【map+字典樹】
題記:(略)
AC的C++語言程式如下:
/* POJ2503 UVA1028 Babelfish */ #include <iostream> #include <string> //#include <unordered_map> #include <map> #include <sstream> using namespace std; int main() { // unordered_map<string, string> words; map<string, string> words; string line, first, second; int i; while (getline(cin, line)) { if(line.length() == 0) break; istringstream sin(line); sin >> first >> second; words[second] = first; } while(getline(cin, line)) { i = words.count(line); if (i > 0) cout << words[line] << endl; else cout << "eh" << endl; } return 0; }