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;
}