Hatena::Grouptopcoder

TopCoderの問題を解く

解いた問題の一覧表

2009-05-04

CeyKaps

| 18:36

問題文

383.68->596.73 / 600

switches の通りにキー配列を交換する変換テーブルを作り、typed の文字列をその変換テーブルに通す。

class CeyKaps {
public:
    string decipher(string typed, vector <string> switches) {
        vector<char> kaps(26);
        for (int i = 0; i < 26; i++) {
            kaps[i] = 'A' + i;
        }
        for (int i = 0; i < switches.size(); i++) {
            int pa = find(kaps.begin(), kaps.end(), switches[i][0]) - kaps.begin();
            int pb = find(kaps.begin(), kaps.end(), switches[i][2]) - kaps.begin();
            swap(kaps[pa], kaps[pb]);
        }

        string result(typed);
        for (int i = 0; i < typed.length(); i++) {
            result[i] = kaps[typed[i]-'A'];
        }
        return result;
    }
};