http://acm.hdu.edu.cn/showproblem.php?pid=5671
1 x y: 交换矩阵M的第x行和第y行(1≤x,y≤n); 2 x y: 交换矩阵M的第x列和第y列(1≤x,y≤m); 3 x y: 对矩阵M的第x行的每一个数加上y(1≤x≤n,1≤y≤10,000); 4 x y: 对矩阵M的第x列的每一个数加上y(1≤x≤m,1≤y≤10,000);定义四个数组,分别存储第几行,第几列,第几行上上加多少,第几列上加多少
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long LL;
#define N 2000
#define met(a, b) memset (a, b, sizeof(a))
int val[N][N], A[N], B[N], C[N], D[N];
int main ()
{
int t, n, m, q;
scanf ("%d", &t);
while (t--)
{
met (A, 0), met (B, 0);
met (C, 0), met (D, 0);
met (val, 0);
scanf ("%d %d %d", &n, &m, &q);
for (int i=1; i<=n; i++) A[i] = i;
for (int i=1; i<=m; i++) B[i] = i;
for (int i=1; i<=n; i++)
for (int j=1; j<=m; j++)
scanf ("%d", &val[i][j]);
while (q--)
{
int k, x, y;
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 ", val[A[i]][B[j]] + C[A[i]] + D[B[j]]);
printf ("%d\n", val[A[i]][B[m]] + C[A[i]] + D[B[m]]);
}
}
return 0;
}