Problem Description
There is a matrix M that has n rows and m columns (1≤n≤1000,1≤m≤1000).Then we perform q(1≤q≤100,000) operations:
1 x y: Swap row x and row y (1≤x,y≤n);
2 x y: Swap column x and column y (1≤x,y≤m);
3 x y: Add y to all elements in row x (1≤x≤n,1≤y≤10,000);
4 x y: Add y to all elements in column x (1≤x≤m,1≤y≤10,000);
Input
There are multiple test cases. The first line of input contains an integer T(1≤T≤20) indicating the number of test cases. For each test case:
The first line contains three integers n, m and q.
The following n lines describe the matrix M.(1≤Mi,j≤10,000) for all (1≤i≤n,1≤j≤m).
The following q lines contains three integers a(1≤a≤4), x and y.
Output
For each test case, output the matrix M after all q operations.
Sample Input
2
3 4 2
1 2 3 4
2 3 4 5
3 4 5 6
1 1 2
3 1 10
2 2 2
1 10
10 1
1 1 2
2 1 2
Sample Output
12 13 14 15
1 2 3 4
3 4 5 6
1 10
There is a matrix M that has n rows and m columns (1≤n≤1000,1≤m≤1000).Then we perform q(1≤q≤100,000) operations:
1 x y: Swap row x and row y (1≤x,y≤n);
2 x y: Swap column x and column y (1≤x,y≤m);
3 x y: Add y to all elements in row x (1≤x≤n,1≤y≤10,000);
4 x y: Add y to all elements in column x (1≤x≤m,1≤y≤10,000);
Input
There are multiple test cases. The first line of input contains an integer T(1≤T≤20) indicating the number of test cases. For each test case:
The first line contains three integers n, m and q.
The following n lines describe the matrix M.(1≤Mi,j≤10,000) for all (1≤i≤n,1≤j≤m).
The following q lines contains three integers a(1≤a≤4), x and y.
Output
For each test case, output the matrix M after all q operations.
Sample Input
2
3 4 2
1 2 3 4
2 3 4 5
3 4 5 6
1 1 2
3 1 10
2 2 2
1 10
10 1
1 1 2
2 1 2
Sample Output
12 13 14 15
1 2 3 4
3 4 5 6
1 10
10 1
记忆模拟:行的交换不会影响列的元素(只是影响顺序),列也是。所以只要记忆行和列模拟运行就行。
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define siz 1005
using namespace std;
int n,m,q;
__int64 a[siz][siz],row[siz],col[siz],j_row[siz],j_col[siz];
int main()
{
int T,k,x,y,t,adi,adj;
cin>>T;
while(T--)
{
scanf("%d %d %d",&n,&m,&q);
for(int i=1;i<=n;i++) row[i]=i;
for(int i=1;i<=m;i++) col[i]=i;
memset(j_row,0,sizeof(j_row));
memset(j_col,0,sizeof(j_col));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
scanf("%I64d",&a[i][j]);
}
for(int i=1;i<=q;i++){
scanf("%d %d %d",&k,&x,&y);
if(k==1){
t=row[x], row[x]=row[y], row[y]=t;
}
if(k==2){
t=col[x], col[x]=col[y], col[y]=t;
}
if(k==3){
t=row[x], j_row[t]+=y;
}
if(k==4){
t=col[x], j_col[t]+=y;
}
}
for(int i=1;i<=n;i++){
adi=row[i];
for(int j=1;j<=m;j++){
adj=col[j];
if(j==1){
cout<<a[adi][adj]+j_row[adi]+j_col[adj];
}else
cout<<" "<<a[adi][adj]+j_row[adi]+j_col[adj];
}
cout<<endl;
}
}
return 0;
}