Submission

Status:

PPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: SayRo

Problemset: Rune

Language: cpp

Time: 0.023 second

Submitted On: 2026-10-11 15:58:06

#include <bits/stdc++.h>
using namespace std;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N;
    long long S;
    if (!(cin >> N >> S)) return 0;
    string s;
    s.reserve(N);
    cin >> s;
    vector<char> bit0(N), bit1(N), new0(N), new1(N);
    for(int i = 0; i < N; i++) {
        int val = s[i] - 'A';  // A->0, B->1, C->2, D->3
        bit0[i] = val & 1;
        bit1[i] = (val >> 1) & 1;
    }
    for(int i = 0; (1LL << i) <= S; i++) {
        if ((S >> i) & 1LL) {
            int shift = (int)((1LL << i) % N);
            if(shift == 0) {
                for(int j = 0; j < N; j++) {
                    bit0[j] = 0;
                    bit1[j] = 0;
                }
                break;
            }
            int off = shift;
            int mid = N - off;
            for(int j = 0; j < mid; j++) {
                new0[j] = bit0[j] ^ bit0[j + off];
                new1[j] = bit1[j] ^ bit1[j + off];
            }
            for(int j = mid; j < N; j++) {
                new0[j] = bit0[j] ^ bit0[j + off - N];
                new1[j] = bit1[j] ^ bit1[j + off - N];
            }
            bit0.swap(new0);
            bit1.swap(new1);
        }
    }
    static const char mp[4] = {'A','B','C','D'};
    string out;
    out.resize(N);
    for(int i = 0; i < N; i++) {
        int code = bit0[i] + 2 * bit1[i];
        out[i] = mp[code];
    }
    cout << out;
    return 0;
}