hdu 5671 Matrix(矩阵行列交换)

http://acm.hdu.edu.cn/showproblem.php?pid=5671

1 x y: 交换矩阵MM的第xx行和第yy(1 \leq x,y \leq n)(1x,yn);
2 x y: 交换矩阵MM的第xx列和第yy(1 \leq x,y \leq m)(1x,ym);
3 x y: 对矩阵MM的第xx行的每一个数加上y(1 \leq x \leq n,1 \leq y \leq 10,000)y(1xn,1y10,000);
4 x y: 对矩阵MM的第xx列的每一个数加上y(1 \leq x \leq m,1 \leq y \leq 10,000)y(1xm,1y10,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;
}


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_大太阳_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值