日期:2025年5月24日
ZeroJudge 題目連結:l922. P.5 古堡長廊 (Castle)
解題想法
我用字典儲存英文單字對應的整數字元。讀取畫的字串及年份時,將年份轉成整數與單字對應的字元組成 tuple 或 pair,儲存到 list 或 vector 之中,依照年份排序,再將排序後的字元組成答案。
Python 程式碼
使用時間約為 22 ms,記憶體約為 3.4 MB,通過測試。
import sys
num = {"ONE": '1', "TWO": '2', "THREE": '3', "FOUR": '4', "FIVE": '5',
"SIX": '6', "SEVEN": '7', "EIGHT": '8', "NINE": '9'}
for line in sys.stdin:
n = int(line) # n 幅畫
data = [] # 資料
for _ in range(n): # 讀取 n 筆資料
s, y = input().split() # 字串 s,年份 y
data.append((int(y), num[s])) # y 轉成整數,s 代入 num 換成字元
data.sort() # 依照年份排序
print(''.join([m for _, m in data])) # 將字元組成字串再印出
C++ 程式碼
使用時間約為 3 ms,記憶體約為 376 kB,通過測試。
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
map<string, char> num =
{{"ONE", '1'}, {"TWO", '2'}, {"THREE", '3'}, {"FOUR", '4'}, {"FIVE", '5'},
{"SIX", '6'}, {"SEVEN", '7'}, {"EIGHT", '8'}, {"NINE", '9'}};
int n; // n 幅畫
while(cin >> n) {
vector<pair<int, char>> data (n); // 資料
for(int i=0; i<n; i++) { // 讀取 n 筆資料
string s; // 字串 s
cin >> s >> data[i].first;
data[i].second = num[s];
}
sort(data.begin(), data.end()); // 依照年份排序
for(int i=0; i<n; i++) cout << data[i].second;
cout << "\n";
}
return 0;
}
沒有留言:
張貼留言