Matrix
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1410 Accepted Submission(s): 562
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思路:用a,b,c,d四个数组分别表示交换的行数,列数,行增加的值和列增加的值#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 10010; int map[N][N]; int a[N] , b[N] , c[N] , d[N]; int main() { int t,n,m,q,k,x,y; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&m,&q); for(int i = 1 ; i <= n ; i++) a[i] = i; for(int j = 1 ; j <= m ; j++) b[j] = j; memset(c,0,sizeof(c)); memset(d,0,sizeof(d)); for(int i = 1 ; i <= n ; i++) for(int j = 1 ; j <= m ; j++) scanf("%d",&map[i][j]); while(q--) { scanf("%d%d%d",&k,&x,&y); if(k == 1) swap(a[x],a[y]); if(k == 2) swap(b[x],b[y]); if(k == 3) c[a[x]] += y; if(k == 4) d[b[x]] += y; } for(int i = 1 ; i <= n ; i++){ for(int j = 1 ; j < m ; j++) { printf("%d ",map[a[i]][b[j]] + c[a[i]] + d[b[j]]); } printf("%d\n",map[a[i]][b[m]] + c[a[i]] + d[b[m]]); } } return 0; }