ZeroJudge N764: Babelfish

同題:UVa 10282 – Babelfish

你剛從滑鐵盧搬到一個大城市。這裡的人們說著一種你難以理解的外語方言。幸運的是,你有一本字典可以幫助你理解他們。

範例測資

範例輸入範例輸出
輸入包含最多 100,000 個字典條目,之後是一個空行,再之後是一則最多包含 100,000 個單詞的訊息。每個字典條目是一行,包含一個英文單詞,後接一個空格,再後接一個外語單詞。字典中沒有外語單詞會重複出現。訊息是一系列的外語單詞,每行一個單詞。輸入中的每個單詞最多包含 10 個小寫字母。輸出是將訊息翻譯成英文,每行一個單詞。不在字典中的外語單詞應翻譯為「eh」。
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay

atcay
ittenkay
oopslay
cat
eh
loops

解題思路

使用 getline 來收前面的資料,如果 getline 到的資料為 empty(),代表那是空行,就開始收下面的資料。將 getline 到的字串分成 a 和 b,並且宣告一個 Map<string, string>,並將 Map[b] 設定成 a。

收下面的資料時,如果 Map[收到的字串].empty(),代表沒有紀錄,輸出「eh」,否則就輸出 Map[收到的字串]。

範例程式碼-ZeroJudge N764: Babelfish

#include <iostream>
#include <map>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    string str;
    map<string, string>MAP;
    while (getline(cin, str) && !str.empty()) {
        string a, b;
        for (int i = 0; i<str.length(); i++) {
            if (str[i] == ' ') {
                b = str.substr(i+1, str.length());
                break;
            }
            a += str[i];
        }
        MAP[b] = a;
    }
    while (cin >> str) {
        if (MAP[str].empty()) cout << "eh\n";
        else cout << MAP[str] << "\n";
    }
}

//ZeroJudge N764
//Dr. SeanXD

發佈留言