ZeroJudge L922: 古堡長廊 (Castle)

因為突如其來的暴風雪,你闖入了一棟廢棄已久的古堡。古堡沒有任何收訊,但你急需聯繫救援。你在古堡裡四處搜索,聽到長廊盡頭的房間有疑似電話鈴聲的聲響。雖然一切顯得有些詭異恐怖,但為了盡快回到現代社會,你還是決定前去一探究竟。你從門縫中看到裡面確實有一台老舊的電話,但房門緊鎖,你必須找出密碼。你從長廊上的畫當中找到一些線索,每幅畫都寫著一個代表 1 到 9 的英文單字,而每幅畫下都標有年份,你認為只要照著年份將畫排序,再將畫上的英文單字轉成數字,就能得出房間密碼。

請撰寫程式將得到的資訊轉換成密碼。

範例測資

範例輸入範例輸出
第一列有一個正整數 N (1 <= N <= 1000),表示共有 N 幅畫。
接下來輸入 N 列,每列輸入一個字串 S 和一個正整數 Y (1 <= Y <= 2000),彼此間以一個空白隔開;S 為數字 1 到 9 的英文單詞 (僅使用大寫英文字母),Y 代表畫作的年份。測資保證年份必定不相同。
輸出一個數字,代表獲得的密碼。
3
ONE 368
THREE 1980
SEVEN 1624
173
6
FOUR 1911
SIX 1914
NINE 1782
EIGHT 573
TWO 42
FIVE 987
285946

解題思路

使用 Pair 的方式將字串和年份輸入,這樣可以直接做排序。字串轉乘數字可以使用 Map 來做判斷

範例程式碼-ZeroJudge L922: 古堡長廊 (Castle)

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

pair<int, int> rtn (int a, int b)
{
    pair<int, int>tmp;
    tmp.first = a;
    tmp.second = b;
    return tmp;
}

int main() {
    map<string, int>MAP;
    MAP["ONE"] = 1;
    MAP["TWO"] = 2;
    MAP["THREE"] = 3;
    MAP["FOUR"] = 4;
    MAP["FIVE"] = 5;
    MAP["SIX"] = 6;
    MAP["SEVEN"] = 7;
    MAP["EIGHT"] = 8;
    MAP["NINE"] = 9;
    int N;
    cin >> N;
    vector<pair<int, int>>v;
    for (int i = 0; i<N; i++)
    {
        string str;
        int num;
        cin >> str >> num;
        v.push_back(rtn(num, MAP[str]));
    }
    sort(v.begin(), v.end());
    for (int i = 0; i<N; i++)
    {
        cout << v[i].second;
    }
    cout << "\n";
}

//ZeroJudge L922
//Dr. SeanXD

發佈留言