#include <bits/stdc++.h>
using namespace std;
int main() {
int r, c, m, i, j, ii, jj;
bool is_rc = 1; // 用來標記當前矩陣的狀態是否為行數 * 列數
cin >> r >> c >> m; // 輸入行數、列數和操作數
int mk[m]; // 存放操作的數組
int arr_rc[r][c], arr_cr[c][r]; // 定義矩陣,兩個不同方向的版本
// 填入矩陣 B 的初始內容
for (i = 0; i < r; i++) {
for (j = 0; j < c; j++) {
cin >> arr_rc[i][j];
}
}
// 填入 M 個操作 mk
for (i = 0; i < m; i++) {
cin >> mk[i];
}
// 按順序處理操作(反向處理)
for (int k = m; k >= 0; k--) {
if (mk[k] == 0) {
// 若 mk[k] == 0,執行旋轉操作
is_rc = !is_rc;
if (is_rc) {
// 轉換回行列矩陣,進行旋轉並更新 arr_rc
for (i = 0; i < r; i++) {
for (j = 0; j < c; j++) {
... // 在這裡進行旋轉操作
}
}
} else {
// 將矩陣轉換為列行矩陣,進行旋轉並更新 arr_cr
for (i = 0; i < c; i++) {
for (j = 0; j < r; j++) {
... // 在這裡進行旋轉操作
}
}
}
} else if (mk[k] == 1) {
// 若 mk[k] == 1,執行翻轉操作
if (is_rc) {
int arr_rc_cpy[r][c];
for (i = 0; i < r; i++) {
for (j = 0; j < c; j++) {
... // 在這裡進行翻轉操作,存入 arr_rc_cpy
}
}
// 將翻轉後的結果複製回 arr_rc
for (i = 0; i < r; i++) {
for (j = 0; j < c; j++) {
... // 將翻轉後的矩陣更新到 arr_rc
}
}
} else {
int arr_cr_cpy[c][r];
for (i = 0; i < c; i++) {
for (j = 0; j < r; j++) {
... // 在這裡進行翻轉操作,存入 arr_cr_cpy
}
}
// 將翻轉後的結果複製回 arr_cr
for (i = 0; i < c; i++) {
for (j = 0; j < r; j++) {
... // 將翻轉後的矩陣更新到 arr_cr
}
}
}
}
}
// 根據當前矩陣狀態輸出最終結果
if (is_rc) {
cout << r << ' ' << c << endl;
for (i = 0; i < r; i++) {
cout << arr_rc[i][0];
for (j = 1; j < c; j++) {
cout << ' ' << arr_rc[i][j];
}
cout << endl;
}
} else {
cout << c << ' ' << r << endl;
for (i = 0; i < c; i++) {
cout << arr_cr[i][0];
for (j = 1; j < r; j++) {
cout << ' ' << arr_cr[i][j];
}
cout << endl;
}
}
}
mk[k] == 0
時,代表矩陣需要旋轉 90 度,這時要注意行數和列數的轉換。mk[k] == 1
時,代表矩陣需要上下翻轉,這時只需要反轉矩陣的順序即可。