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;
		}
	}
}
相关推荐
小月土星1 小时前
JavaScript 快速排序:从 pivot、双指针到分治思想
javascript·算法·面试
小月土星1 小时前
JavaScript 递归入门:从 1 到 n 求和,再到数组扁平化
javascript·算法·面试
To_OC16 小时前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
鱼鱼不愚与21 小时前
《原来如此 | 第01期:为什么导航软件能预测红绿灯倒计时?》
算法
博客18001 天前
酷宝的使用方法,超好用的免费界面库,C++、MFC可用
c++·mfc·界面库·库来帮·酷宝
郝学胜_神的一滴1 天前
CMake 026:属性体系精讲、四大作用域全解 & 实战代码落地
c++·cmake
复杂网络1 天前
论最小 Agent 计算机的形态
算法
kisshyshy2 天前
🍦 雪糕、食堂、火车厢:三幅漫画吃透栈、队列与链表
javascript·算法
众少成多积小致巨2 天前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++