题目
思路:
1.一维数组存储数据
2.重塑操作(1 p q) 只修改行数 row 和列数 col
3.转置操作(2 0 0) 遍历当前数组,交换 row 和 col
4.查询操作(3 i j) 直接按计算索引访问
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m, t;
cin >> n >> m >> t;
vector<int> matrix(n * m);
for (int i = 0; i < n * m; i++) {
cin >> matrix[i];
}
int row = n, col = m; //当前矩阵的行列数
for (int i = 0; i < t; i++) {
int op, x, y;
cin >> op >> x >> y;
if (op == 1) {
//重塑操作:仅修改行列数,不改动数据
row = x;
col = y;
}
else if (op == 2) {
vector<int> temp(matrix.size()); // 临时存储转置后的数据
for (int r = 0; r < row; r++) {
for (int c = 0; c < col; c++) {
temp[c * row + r] = matrix[r * col + c]; // 交换行列位置
}
}
matrix.swap(temp); // 交换矩阵数据
swap(row, col); // 行列互换
}
else if (op == 3) {
cout << matrix[x * col + y] << endl;
}
}
return 0;
}