Matrix
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
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);
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.
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
Hint
Recommand to use scanf and printf Source
思路:就是标记记录那行是原数组的那行,在原数组的那行加减就好;
代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<iostream> #include<cstdio> #include<cmath> #include<string> #include<queue> #include<algorithm> #include<stack> #include<cstring> #include<vector> #include<list> #include<set> #include<map> using namespace std; #define ll __int64 #define mod 1000000007 #define inf 999999999 //#pragma comment(linker, "/STACK:102400000,102400000") ll a[1010][1010]; ll hang[1010],lie[1010],hangadd[1010],lieadd[1010];//不管你怎么换 ,都不可能把这行给拆了 int main() { ll casee,i,t; scanf("%I64d",&casee); while(casee--) { ll n,m,q; memset(hangadd,0,sizeof(hangadd)); memset(lieadd,0,sizeof(lieadd)); scanf("%I64d%I64d%I64d",&n,&m,&q); for(i=1;i<=n;i++) for(t=1;t<=m;t++) { scanf("%I64d",&a[i][t]); hang[i]=i; lie[t]=t; } while(q--) { ll op,han,li; scanf("%I64d%I64d%I64d",&op,&han,&li); if(op==1) { swap(hang[han],hang[li]); } else if(op==2) { swap(lie[han],lie[li]); } else if(op==3) hangadd[hang[han]]+=li; else lieadd[lie[han]]+=li; } for(i=1;i<=n;i++) for(t=1;t<=m;t++) printf("%I64d%c",a[hang[i]][lie[t]]+hangadd[hang[i]]+lieadd[lie[t]],t==m?' ':' '); } return 0; }