【題解】ZeroJudge i400: 2. 字串解碼

【題目敘述】https://zerojudge.tw/ShowProblem?problemid=i400
【解題想法】輸入所有的「 e 字串」後,將「字串 T」 逆序處理,還原出「字串S」。

    #include <iostream>
    #include <string>
    using namespace std;

    int main() {
        int m, n;
        cin >> m >> n;
        string e[m];
        for (int i = 0; i < m; i++) {
            cin >> e[i];
        }
        string S = "", T = "";
        cin >> T;
        for (int i = m-1; i >= 0; i--) {
            int cnt_1 = 0; //統計‘1’出現的數量
            S = "";
            for (int j = n-1; j >= 0; j--) {
                if (e[i][j] == '1') {
                    S += T[j];
                    cnt_1++;
                } else {
                    S = T[j] + S;
                }
            }
            if (cnt_1 % 2) {
                //字串 e 中 1 的出現次數是奇數
                if (n % 2) {
                    //字串 S 的長度是奇數
                    S = S.substr(n/2+1, n/2) + S.substr(n/2, 1) + S.substr(0, n/2);
                } else {
                    S = S.substr(n/2, n/2) + S.substr(0, n/2);
                }
            }
            T = S;
        }
        cout << S << "\n";
        return 0;
    }
分享本文 Share with friends