1.1 Joyvan的矩阵

算法设计与分析 1.1 Joyvan的矩阵

题目描述

Joyvan有一个大小为n * m的矩阵,现在他要对矩阵进行q次操作,操作分为如下三种:

0 x y:交换矩阵的x、y两行。

1 x y:交换矩阵的x、y两列。

2 x y:求当前矩阵第x行第y列的元素。

输入格式

第一行三个正整数n、m、q,表示矩阵大小和操作次数。

接下来n行,每行m个空格隔开的整数,表示矩阵的元素。

接下来q行,每行三个数op、x、y,表示上述操作中的一种。

对于80%的数据,1 <= n、m、q <= 1000。

对于100%的数据,1 <= n、m <= 1000,1 <= q <= 1000000,矩阵元素大小在int范围内且非负。

输出格式

对于操作2,输出一个整数,表示对应的元素。

样例输入

cpp 复制代码
2 2 6
1 2
3 4
0 1 2
1 1 2
2 1 1
2 1 2
2 2 1
2 2 2

样例输出

cpp 复制代码
4
3
2
1

提示

输入规模较大,请使用scanf/printf。

参考代码

cpp 复制代码
#include <iostream>
#define swap(a,b) { int t=a;a=b;b=t;}
/*
存储矩阵A;
申请行数组R和列数组C,初始赋值为1,2,3,---,n(m)

交换行x和行y ------ swap(R[x],R[y]);
交换列x和列y ------ swap(C[x],C[y]);
输出第x行第y列的元素 ------输出A[R[x]][C[y]];

*/
int main() {
	int n,m,q,op,x,y;

	scanf("%d %d %d", &n, &m, &q);

	int A[n+1][m+1],R[n+1],C[m+1];

	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			scanf("%d", &A[i][j]);
			C[j]=j;
		}
		R[i]=i;
	}

	for(int i=0; i<q; i++) {
		scanf("%d %d %d", &op, &x, &y);
		switch(op) {
			case 0:
				swap(R[x],R[y]);
				break;
			case 1:
				swap(C[x],C[y]);
				break;
			case 2:
				printf("%d\n", A[R[x]][C[y]]);
				break;
		}
	}
}
相关推荐
大数据追光猿6 分钟前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
Dream it possible!23 分钟前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
夏末秋也凉25 分钟前
力扣-回溯-46 全排列
数据结构·算法·leetcode
南宫生25 分钟前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
柠石榴29 分钟前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯
Leuanghing29 分钟前
【Leetcode】11. 盛最多水的容器
python·算法·leetcode
qy发大财30 分钟前
加油站(力扣134)
算法·leetcode·职场和发展
王老师青少年编程30 分钟前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛
qy发大财31 分钟前
柠檬水找零(力扣860)
算法·leetcode·职场和发展
瓦力的狗腿子34 分钟前
Starlink卫星动力学系统仿真建模番外篇6-地球敏感器
算法·数学建模·simulink