因為突如其來的暴風雪,你闖入了一棟廢棄已久的古堡。古堡沒有任何收訊,但你急需聯繫救援。你在古堡裡四處搜索,聽到長廊盡頭的房間有疑似電話鈴聲的聲響。雖然一切顯得有些詭異恐怖,但為了盡快回到現代社會,你還是決定前去一探究竟。你從門縫中看到裡面確實有一台老舊的電話,但房門緊鎖,你必須找出密碼。你從長廊上的畫當中找到一些線索,每幅畫都寫著一個代表 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