HDU5671Matrix(矩阵行列交换)

有一个nn行mm列的矩阵(1 \leq n \leq 1000 ,1 \leq m \leq 1000 )(1≤n≤1000,1≤m≤1000),在这个矩阵上进行qq  (1 \leq q \leq 100,000)(1≤q≤100,000) 个操作:

1 x y: 交换矩阵MM的第xx行和第yy行(1 \leq x,y \leq n)(1≤x,y≤n);
2 x y: 交换矩阵MM的第xx列和第yy列(1 \leq x,y \leq m)(1≤x,y≤m);
3 x y: 对矩阵MM的第xx行的每一个数加上y(1 \leq x \leq n,1 \leq y \leq 10,000)y(1≤x≤n,1≤y≤10,000);
4 x y: 对矩阵MM的第xx列的每一个数加上y(1 \leq x \leq m,1 \leq y \leq 10,000)y(1≤x≤m,1≤y≤10,000);

输入描述

输入包含多组数据. 第一行有一个整数T (1\leq T\leq 15)T(1≤T≤15), 表示测试数据的组数. 对于每组数据:
第一行输入3个整数nn, mm, qq.
接下来的nn行,每行包括mm个整数,表示矩阵MM。(1 \leq M_{i,j} \leq 10,000),(1 \leq i \leq n,1 \leq j \leq m)(1≤M?i,j??≤10,000),(1≤i≤n,1≤j≤m).
最后qq行,每行输入三个整数a(1 \leq a \leq 4)a(1≤a≤4), xx, yy。

输出描述

对于每组数据,输出经过所有qq个操作以后的矩阵MM。

输入样例

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

输出样例

12 13 14 15
1 2 3 4
3 4 5 6
1 10
10 1

先设两个数组 x[i],y[j]分别表示 第 i 行此时应该是第x[i]行,而第j列此时是第y[j]列,在设两个数组addx[i],addy[j]分别表示 第 i 行加上addx[i], 第j列加上 addy[j]

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 using namespace std;
 6 const int Max = 10000 + 10;
 7 int x[Max], y[Max], addx[Max], addy[Max];
 8 int g[Max][Max];
 9
10 int main()
11 {
12     int t;
13     int n, m, q;
14     scanf("%d", &t);
15     while (t--)
16     {
17         scanf("%d%d%d", &n, &m, &q);
18         for (int i = 1; i <= n; i++)
19         {
20             for (int j = 1; j <= m; j++)
21                 scanf("%d", &g[i][j]);
22         }
23         for (int i = 1; i <= n; i++)
24             x[i] = i;  // 初始化为本身
25         for (int j = 1; j <= m; j++)
26             y[j] = j;
27         memset(addx, 0, sizeof(addx));
28         memset(addy, 0, sizeof(addy));
29         while (q--)
30         {
31             int op;
32             int tx ,ty;
33             scanf("%d%d%d", &op, &tx, &ty);
34             if (op == 1)
35             {
36                 int temp = x[tx];  // 行交换
37                 x[tx] = x[ty];
38                 x[ty] = temp;
39             }
40             else if (op == 2)
41             {
42                 int temp = y[tx];
43                 y[tx] = y[ty];
44                 y[ty] = temp;
45             }
46             else if (op == 3)
47             {
48                 addx[ x[tx] ] += ty;
49             }
50             else if (op == 4)
51             {
52                 addy[ y[tx] ] += ty;
53             }
54         }
55         for (int i = 1; i <= n; i++)
56         {
57             for (int j = 1; j < m; j++)
58                     printf("%d ", g[ x[i] ][ y[j] ] + addx[ x[i] ] + addy[ y[j] ]);
59             printf("%d\n", g[ x[i] ][ y[m] ] + addx[ x[i] ] + addy[ y[m] ]);
60         }
61     }
62     return 0;
63 }

时间: 2024-12-15 06:59:58

HDU5671Matrix(矩阵行列交换)的相关文章

Codeforces 446B DZY Loves Modification 矩阵行列分开考虑 优先队列+构造

题目链接:点击打开链接 题意: 给定n行m列的矩阵 k次操作,一个常数p ans = 0; 对于每次操作 可以任选一行或一列, 则ans += 这行(列)的数字和 然后这行(列)上的每个数字都-=p 问最大的ans 思路: 首先我们设最终选了 行 i 次,则列选了 k-i 次 那么假设我们先全部选行,然后选列,则每次选列时,要-= i*p 这样最后是 -= i*(k-i)*p 也就是所有行对列的影响 那我们先把这个 i*(k-i)*p 提出来,那么选行和选列就互不影响 就可以分别考虑行和列 对于

python/numpy/tensorflow中,对矩阵行列操作,下标是怎么回事儿?

Python中的list/tuple,numpy中的ndarrray与tensorflow中的tensor. 用python中list/tuple理解,仅仅是从内存角度理解一个序列数据,而非数学中标量,向量和张量. 从python内存角度理解,就是一个数值,长度为1,并且不是一个序列: 从numpy与tensorflow数学角度理解,就是一个标量,shape为(),其轴为0: [1,2,3,4,5,6] 从python内存角度理解,就是1*6或者长度为6的一个序列: 从numpy与tensorf

python 有关矩阵行列的存取 np.array

初始化 a = range(16) a = np.array(a) a = a.reshape(4,4) a [[ 0  1  2  3] [ 4  5  6  7] [ 8  9 10 11] [12 13 14 15]] 获取a的[0,1,4]行 b = a[ range( 2)+range( 3, 4),:] [[ 0  1  2  3] [ 4  5  6  7] [12 13 14 15]] 获取b的[0,1,4]列 c = b[:, range( 1 )+range(2 , 3)]

Mathf函数说明

Mathf结构:常用数学函数的集合.类变量◆ static var Deg2Rad:float描述:度到弧度的转化常量(只读).这个等于(PI*2)/360.//转化30度为弧度var deg=30.0;var od=dcg*Mathf.Deg2Rad;参见:Rad2Deg常量.◆ static varEpsilon:float描述:一个小的浮点数值(只读)比较小于它的值没有多人意见,因为浮点数是不精确的.print(MathfEpsilon);◆ static var Infinity:flo

Unity3D脚本中文系列教程(八)

◆ static var matrix : Matrix4x4 描述:设置用于渲染所有gizmos的矩阵. 类方法 ◆ Static function DrawCube(center:Vector3,size:Vector3):void 描述:用center和size绘制一个立方体.function OnDrawGizmosSelected() {        //在变换位置处绘制一个变透明的蓝色立方体        Gizmos.color=Color(1,0,0,5);        Gi

练习3:将矩阵的行列之和分别存入两个数组

如题,矩阵行列之和放入另外另个数组,并且要求输出时,每行之后紧跟行的和,列下面紧跟列之和 具体代码如下: 1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int i, j; 7 int A[5][5] = { 23, 45, 6, 1, -3, 8 4, 5, 233, 456, 0, 9 3, 56, 78, -356, 5, 10 6, 777, 8, 89, 9, 11 3, 6, 8, 9, 90 };

bzoj1059:[ZJOI2007]矩阵游戏【二分图匹配】

Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩阵的任意行列,交换这两列(即交换对应格子的颜色)游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑色.对于某些关卡,小Q百思不得其解,以致他开始怀疑这些关卡是不是根本就是无

计算方法(三)矩阵类库

测量平差以及工科中常常用到矩阵的相关运算,因此自己写了一个,同时考虑到了类库的可用性,希望大家多多指教. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace com.WangHui { [Serializable] public class Matrix { public double[] elem

(转载)3D 图形编程的数学基础(2) 矩阵及其运算

原文地址:http://blog.csdn.net/vagrxie/article/details/4974985 版权声明:本作品由九天雁翎创作,采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可.http://www.jtianling.com 目录(?)[+] write by 九天雁翎(JTianLing) -- blog.csdn.NET/vagrxie 讨论新闻组及文件 Technorati 标签: 3D,matrix,irrlich,D3D,DirectX,math 矩阵