熱門文章

2025年9月5日 星期五

ZeroJudge 解題筆記:d586. 哈密瓜美語

作者:王一哲
日期:2025年9月5日


ZeroJudge 題目連結:d586. 哈密瓜美語

解題想法


這題用兩個字典建立數字轉英文、英文轉數字的對照表,再依照讀取到的測資開頭是數字或字母,判斷要從哪一個表格找答案。

Python 程式碼


使用時間約為 49 ms,記憶體約為 5.5 MB,通過測試。
s1 = "mjqhofawcpnsexdkvgtzblryui"  # 數字轉英文用的字串
s2 = "uzrmatifxopnhwvbslekycqjgd"  # 英文轉數字用的字串
ntoc, cton = dict(), dict()  # 數字轉英文、英文轉數字的對照表
for i, c in enumerate(s1, start=1): ntoc[str(i)] = c
for i, c in enumerate(s2, start=1): cton[c] = i
n = int(input())  # n 道謎題
for _ in range(n):  # 執行 n 次
    line = list(input().split())  # 讀取一行資料分割後存入串列
    m = int(line[0])  # 資料長度為 m
    if line[1].isalpha():  # 如果 line[1] 是字母
        print(sum(cton[c] for c in line[1:]))  # 依序讀取 line[1] ~ line[-1] 代入表中找數字求加總
    else:  # 如果 line[1] 是數字
        print("".join([ntoc[i] for i in line[1:]]))  # 依序讀取 line[1] ~ line[-1] 代入表中找字母組成字串


C++ 程式碼


使用時間約為 23 ms,記憶體約為 360 kB,通過測試。
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    string s1 = "mjqhofawcpnsexdkvgtzblryui";  // 數字轉英文用的字串
    string s2 = "uzrmatifxopnhwvbslekycqjgd";  // 英文轉數字用的字串
    unordered_map<int, char> ntoc;  // 數字轉英文的對照表
    unordered_map<string, int> cton;  // 英文轉數字的對照表
    for(int i=0; i<26; i++) ntoc[i+1] = s1[i];
    for(int i=0; i<26; i++) {
        string s (1, s2[i]);  // 將 s2[i] 轉成長度為 1 的字串 s
        cton[s] = i+1;
    }
    int n; cin >> n;  // n 道謎題
    for(int i=0; i<n; i++) {  // 執行 n 次
        int m; cin >> m;  // 資料長度為 m
        string s; cin >> s;  // 暫存資料用的字串,先讀取一個字串
        if (isalpha(s[0])) {  // 如果 s[0] 是字母
            int isum = cton[s];  // 加總,預設為 s 對應的數字
            for(int j=1; j<m; j++) {  // 讀取 m-1 個字串
                cin >> s; isum += cton[s];
            }
            cout << isum << "\n";
        } else {  // 如果 line[1] 是字母
            string t (1, ntoc[stoi(s)]);  // 儲存答案用的字串,預設為 s 對應的字母
            for(int j=1; j<m; j++) {  // 讀取 m-1 個字串
                cin >> s; t += ntoc[stoi(s)];
            }
            cout << t << "\n";
        }
    }
    return 0;
}


沒有留言:

張貼留言