【題解】ZeroJudge e809: 1.字母排序 (Letters)

【題目敘述】https://zerojudge.tw/ShowProblem?problemid=e809
【解題想法】排序

  • seq:紀錄字元 c 在第一個字串(老師自定的字母排序規則)中出現的序位。
  • ans[i]:存放一個pair,紀錄第二個字串中,第 i 個字元 (Ci) 對應字母排序規則的序位(查找seq[ ],{seq[Ci], Ci}。
  • 對 ans[ ] 進行排序。
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    string S1, S2;
    int Q, X;

    cin >> S1 >> S2;
    int seq[26];
    memset(seq, -1, sizeof(seq));
    for (int i=0; i<S1.size(); i++){
        seq[S1[i] - 'A'] = i;
    }
    int len = (int)S2.size();
    pair<int, char> ans[len];
    for (int i=0; i<len; i++){
        ans[i] = {seq[S2[i] - 'A'], S2[i]};
    }
    sort(ans, ans + len);

    cin >> Q;
    while (Q--){
        cin >> X;
        cout << ans[X-1].second << "\n";
    }
}

Python code (credit: Amy Chou)

S1 = input()
S2 = input()
Q = int(input())

seq = [-1 for _ in range(26)]
for i, c in enumerate(S1):
    seq[ord(c) - ord('A')] = i

ans = []
for c in S2:
    ans.append((seq[ord(c) - ord('A')], c))
    
ans.sort()
for _ in range(Q):
    X = int(input())
    print(ans[X-1][1])
分享本文 Share with friends