题目描述
重塑操作:1 p q
转置操作:2 0 0
元素查询:3 i j
输出格式
输出到标准输出。
每个查询操作输出一行,仅包含一个整数表示查询结果。
样例1输入
3 2 3
1 2
3 4
5 6
3 0 1
1 2 3
3 1 2
1
2
3
4
5
6
7
样例1输出
2
6
1
2
样例2输入
3 2 5
1 2
3 4
5 6
3 1 0
2 0 0
3 1 0
1 3 2
3 1 0
1
2
3
4
5
6
7
8
9
样例2输出
3
2
5
原题:TUOJ
#include<bits/stdc++.h>
using namespace std;
int n,m,t,op,y,x;
int a[10000];
void work(){
cin>>n>>m>>t;
for(int i=0;i<n*m;i++) cin>>a[i];
while(t--){
cin>>op>>x>>y;
if (op==1) n=x,m=y;//矩阵重塑就是按照输入的行和列
else if(op==2){//矩阵转置
vector<int> b(a,a+n*m);//原数组的拷贝
swap(n,m);//交换nm的值,因为这是矩阵重置,所以行变成列,列变成行。
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
a[i*m+j]=b[j*n+i];//行变列,列变行
/*,从原来的第i 行第j列变化成如今的第j列第i行,
为什么说表达出来和我说的不一样,这是为了方便表示新矩阵*/
}
}
}
else cout<<a[x*m+y]<<endl;//纯纯输出当前的元素
}
}
int main (){
int Case=1;
while(Case--) work();
return 0;
}