1. 首页
  2. 水题

HDU 5671 Matrix (矩阵行列交换)

对于交换行、交换列的操作,分别记录当前状态下每一行、每一列是原始数组的哪一行、哪一列即可。

对每一行、每一列加一个数的操作,也可以两个数组分别记录。注意当交换行、列的同时,也要交换增量数组。

输出时通过索引找到原矩阵中的值,再加上行、列的增量。

复杂度O(q+mn)O(q+mn)O(q+mn)

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

int a[1010][1010];
int n, m, q;
int row[1010], col[1010], rs[1010], cs[1010];

int main() {
	int t;
	scanf("%d", &t);
	while (t--) {
		scanf("%d%d%d", &n, &m, &q);
		for (int i = 1; i <= n; ++i) {
			for (int j = 1; j <= m; ++j) {
				scanf("%d", &a[i][j]);
			}
		}
		for (int i = 1; i <= n; ++i) {
			row[i] = i;
			rs[i] = 0;
		}
		for (int i = 1; i <= m; ++i) {
			col[i] = i;
			cs[i] = 0;
		}
		int op, x, y;
		while (q--) {
			scanf("%d%d%d", &op, &x, &y);
			if (op == 1) {
				swap(row[x], row[y]);
			} else if (op == 2) {
				swap(col[x], col[y]);
			} else if (op == 3) {
				rs[row[x]] += y;
			} else if (op == 4) {
				cs[col[x]] += y;
			}
		}
		for (int i = 1; i <= n; ++i) {
			for (int j = 1; j <= m; ++j) {
				int tmp = a[row[i]][col[j]];
				tmp += rs[row[i]];
				tmp += cs[col[j]];
				printf(j == 1 ? "%d" : " %d", tmp);
			}
			puts("");
		}
	}

	return 0;
}

 

评分 0, 满分 5 星
0
0
看完收藏一下,下次也能找得到
  • 版权声明:本文基于《知识共享署名-相同方式共享 3.0 中国大陆许可协议》发布,转载请遵循本协议
  • 文章链接:http://www.carlstedt.cn/archives/861 (转载时请注明本文出处及文章链接)
  • 本文无相关文章
上一篇:
:下一篇

发表评论

gravatar

快来吐槽一下吧!

  1. .01 4:06
  2. .02 1:47
  3. .03 3:39
  4. .04 1:40