1. 程式人生 > >Bailian2804 詞典【map+字典樹】

Bailian2804 詞典【map+字典樹】

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;  
}