
cpp
//矩阵重塑(其二)
#include<iostream>
using namespace std;
int main(){
int n,m,t;
cin>>n>>m>>t;
int c[10000][10000];
int s=0,sum=0;
int d[10000],k[100000];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>c[i][j];
d[s]=c[i][j];
s++;
}
}
while(t>0){
int op,a,b;
cin>>op>>a>>b;
if(op==1){//重塑
s=0;
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
c[i][j]=d[s];
s++;
}
}
}
if(op==2)/*转置 */{
s=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
c[j][i]=d[s];
s++;
}
}
s=0;//转置之后更新,以便重塑
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
d[s]=c[i][j];
s++;
}
}
}
if(op==3) /*//查询 */{
k[sum]=c[a][b];
sum++;
}
t--;
}
for(int i=0;i<sum;i++){
cout<<k[i]<<endl;
}
return 0;
}
**注意,以上代码的各数组大小根据题意改变,DEV可能不支持太大的空间

