熱門文章

2025年5月24日 星期六

ZeroJudge 解題筆記:l922. P.5 古堡長廊 (Castle)

作者:王一哲
日期: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;
}


沒有留言:

張貼留言