#55122: AC 3.5MB


nch00sek (nch00sek)


#include <iostream>

 

#include <string>
#include <vector>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
string S;
vector<string> nums(m);//用vector存數字因為會有好幾個
for (int i = 0; i < m; i++) {
cin >> nums[i];
}
string T;
cin >> T;
for (int i = m - 1; i >= 0; i--) //從最後一組數字開始倒著跑
{
S = "";//先把它設成空的
int count1 = 0;
for (int j = n - 1; j >= 0; j--)//因為是倒著解密所以東西都要倒著來 建議拿一張紙畫圖
{
if (nums[i][j] == '0') {
char temp = T.back();
T.pop_back();
S.insert(S.begin(), temp);//把T最後一個放到S的第一個
} else {
char temp = T.back();
T.pop_back();
S.push_back(temp);//把T最後一個放到S的最後一個
count1++;//順便數1有幾個後面可以直接判斷
}
}
if (count1 % 2 == 0) {

 

} else {
int half = n / 2;//切一半然後判斷奇數偶數
string frist_half = S.substr(0, half);
string last_half = S.substr(n - half, half);
string mid;
if (n % 2 == 1) {
mid = S.substr(half, 1);
}
S = last_half + mid + frist_half;
}
T = S;//把弄好的存起來到T給下一次回圈用
}
cout << S;
}