CCF-CSP认证考试 202406-2 矩阵重塑(其二) 100分题解

更多 CSP 认证考试题目题解可以前往:CSP-CCF 认证考试真题题解


原题链接: 202406-2 矩阵重塑(其二)

时间限制: 1.0 秒
空间限制: 512 MiB

题目背景

矩阵转置操作是将矩阵的行和列交换的过程。在转置过程中,原矩阵 A \mathbf{A} A 的元素 a i j a_{ij} aij​ 会移动到转置后的矩阵 A T \mathbf{A}^T AT a j i a_{ji} aji​ 的位置。这意味着 A \mathbf{A} A 的第 i i i 行第 j j j 列的元素在 A T \mathbf{A}^T AT 中成为了第 j j j 行第 i i i 列的元素。

例如,有矩阵 A \mathbf{A} A 如下:

A = [ a b c d e f ] \mathbf{A} = \begin{bmatrix} a & b & c \\ d & e & f \end{bmatrix} A=[adbecf]

它的转置矩阵 A T \mathbf{A}^T AT 会是:

A T = [ a d b e c f ] \mathbf{A}^T = \begin{bmatrix} a & d \\ b & e \\ c & f \end{bmatrix} AT= abcdef

矩阵转置在线性代数中是一个基本操作,广泛应用于各种数学和工程领域。

题目描述

给定 n × m n \times m n×m 的矩阵 M \mathbf{M} M,试编写程序支持以下查询和操作:

  1. 重塑操作 p p p q q q:将当前矩阵重塑为 p × q p \times q p×q 的形状(重塑的具体定义见上一题);

  2. 转置操作:将当前矩阵转置;

  3. 元素查询 i i i j j j:查询当前矩阵第 i i i j j j 列的元素( 0 ≤ i < n 0 \le i < n 0i<n 0 ≤ j < m 0 \le j <m 0j<m)。

依次给出 t t t 个上述查询或操作,计算其中每个查询的结果。

输入格式

从标准输入读入数据。

输入共 n + t + 1 n + t + 1 n+t+1 行。

输入的第一行包含三个正整数 n n n m m m t t t

接下来依次输入初始矩阵 M \mathbf{M} M 的第 0 0 0 到第 n − 1 n - 1 n1 行,每行包含 m m m 个整数,按列下标从 0 0 0 m − 1 m - 1 m1 的顺序依次给出。

接下来输入 t t t 行,每行包含形如 op a b 的三个整数,依次给出每个查询或操作。具体输入格式如下:

  • 重塑操作:1 p q

  • 转置操作:2 0 0

  • 元素查询:3 i j

输出格式

输出到标准输出。

每个查询操作输出一行,仅包含一个整数表示查询结果。

样例1输入

3 2 3
1 2
3 4
5 6
3 0 1
1 2 3
3 1 2

样例1输出

2
6

样例2输入

3 2 5
1 2
3 4
5 6
3 1 0
2 0 0
3 1 0
1 3 2
3 1 0

样例2输出

3
2
5

初始矩阵: [ 1 2 3 4 5 6 ] \begin{bmatrix} 1 & 2\\ 3 & 4\\ 5 & 6 \end{bmatrix} 135246 ( 1 , 0 ) (1, 0) (1,0) 位置元素为 3 3 3

转置后: [ 1 3 5 2 4 6 ] \begin{bmatrix} 1 & 3 & 5\\ 2 & 4 & 6 \end{bmatrix} [123456] ( 1 , 0 ) (1, 0) (1,0) 位置元素为 2 2 2

重塑后: [ 1 3 5 2 4 6 ] ​ \begin{bmatrix} 1 & 3\\ 5 & 2\\ 4 & 6 \end{bmatrix}​ 154326 ​​, ( 1 , 0 ) (1, 0) (1,0) 位置元素为 5 5 5

子任务

80 80% 80 的测试数据满足:

  • t ≤ 100 t \le 100 t100

全部的测试数据满足:

  • t ≤ 1 0 5 t \le 10^{5} t105 且其中转置操作的次数不超过 100 100 100

  • n n n m m m 和所有重塑操作中的 p p p q q q 均为正整数且 n × m = p × q ≤ 1 0 4 n \times m = p \times q \le 10^{4} n×m=p×q104

  • 输入矩阵中每个元素的绝对值不超过 1000 1000 1000

提示

  • 对于 n × m n \times m n×m 的矩阵,虽然转置和重塑操作都可以将矩阵形态变为 m × n m \times n m×n,但这两种操作通常会导致不同的结果。

  • 评测环境仅提供各语言的标准库,特别地,不提供任何线性代数库(如 numpypytorch 等)。


题解

待补

时间复杂度: O ( t + 100 n m ) \mathcal{O}(t+100nm) O(t+100nm)

参考代码(21ms,3912KB)

/*Created by Pujx on 2024/6/20.
*/
#pragma GCC optimize(2, 3, "Ofast", "inline")
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
//#define int long long
//#define double long double
using i64 = long long;
using ui64 = unsigned long long;
//using i128 = __int128;
#define inf (int)0x3f3f3f3f3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define yn(x) cout << (x ? "yes" : "no") << endl
#define Yn(x) cout << (x ? "Yes" : "No") << endl
#define YN(x) cout << (x ? "YES" : "NO") << endl
#define mem(x, i) memset(x, i, sizeof(x))
#define cinarr(a, n) for (int _ = 1; _ <= n; _++) cin >> a[_]
#define cinstl(a) for (auto& _ : a) cin >> _
#define coutarr(a, n) for (int _ = 1; _ <= n; _++) cout << a[_] << " \n"[_ == n]
#define coutstl(a) for (const auto& _ : a) cout << _ << ' '; cout << endl
#define all(x) (x).begin(), (x).end()
#define md(x) (((x) % mod + mod) % mod)
#define ls (s << 1)
#define rs (s << 1 | 1)
#define ft first
#define se second
#define pii pair<int, int>
#ifdef DEBUG#include "debug.h"
#else#define dbg(...) void(0)
#endifconst int N = 2e5 + 5;
//const int M = 1e5 + 5;
const int mod = 998244353;
//const int mod = 1e9 + 7;
//template <typename T> T ksm(T a, i64 b) { T ans = 1; for (; b; a = 1ll * a * a, b >>= 1) if (b & 1) ans = 1ll * ans * a; return ans; }
//template <typename T> T ksm(T a, i64 b, T m = mod) { T ans = 1; for (; b; a = 1ll * a * a % m, b >>= 1) if (b & 1) ans = 1ll * ans * a % m; return ans; }int a[N];
int n, m, t, k, q;void work() {cin >> n >> m >> t;for (int i = 0; i < n * m; i++) cin >> a[i];while (t--) {int op, x, y;cin >> op >> x >> y;if (op == 1) n = x, m = y;else if (op == 2) {vector<int> b(a, a + n * m);swap(n, m);for (int i = 0; i < n; i++)for (int j = 0; j < m; j++)a[i * m + j] = b[j * n + i];}else cout << a[x * m + y] << endl;}
}signed main() {
#ifdef LOCALfreopen("C:\\Users\\admin\\CLionProjects\\Practice\\data.in", "r", stdin);freopen("C:\\Users\\admin\\CLionProjects\\Practice\\data.out", "w", stdout);
#endifios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int Case = 1;//cin >> Case;while (Case--) work();return 0;
}
/*_____   _   _       _  __    __|  _  \ | | | |     | | \ \  / /| |_| | | | | |     | |  \ \/ /|  ___/ | | | |  _  | |   }  {| |     | |_| | | |_| |  / /\ \|_|     \_____/ \_____/ /_/  \_\
*/

关于代码的亿点点说明:

  1. 代码的主体部分位于 void work() 函数中,另外会有部分变量申明、结构体定义、函数定义在上方。
  2. #pragma ... 是用来开启 O2、O3 等优化加快代码速度。
  3. 中间一大堆 #define ... 是我习惯上的一些宏定义,用来加快代码编写的速度。
  4. "debug.h" 头文件是我用于调试输出的代码,没有这个头文件也可以正常运行(前提是没定义 DEBUG 宏),在程序中如果看到 dbg(...) 是我中途调试的输出的语句,可能没删干净,但是没有提交上去没有任何影响。
  5. ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); 这三句话是用于解除流同步,加快输入 cin 输出 cout 速度(这个输入输出流的速度很慢)。在小数据量无所谓,但是在比较大的读入时建议加这句话,避免读入输出超时。如果记不下来可以换用 scanfprintf,但使用了这句话后,cinscanfcoutprintf 不能混用。
  6. main 函数和 work 函数分开写纯属个人习惯,主要是为了多组数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/46644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端开发之盒子模型

目录 盒子分类 display属性 盒子内部结构特征 padding填充区 border边框区 margin外边距 盒子width和height边界 盒子分类 块级盒子&#xff08;又叫块级元素、块级标签&#xff09; 特征&#xff1a;独占一行&#xff0c;对宽度高度支持 如&#xff1a;p div ul li h1…

完整且详细的Yolov8复现+训练自己的数据集

Yolov8 的源代码下载&#xff1a;ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX > CoreML > TFLite (github.com)https://github.com/ultralytics/ultralytics Yolov8的权重下载&#xff1a;Releases ultralytics/assets GitHubUltralyt…

Java 反射机制:概念、用途与示例

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

Go语言并发编程-案例_3

案例 并发目录大小统计 业务逻辑 统计目录的文件数量和大小&#xff08;或其他信息&#xff09;。示例输出&#xff1a; // 某个目录&#xff1a;2637 files 1149.87 MB 实现思路 给定一个或多个目录&#xff0c;并发的统计每个目录的size&#xff0c;最后累加到一起。 当…

Spring纯注解开发

前言 Spring3.0引入了纯注解开发的模式&#xff0c;框架的诞生是为了简化开发&#xff0c;那注解开发就是简化再简化。Spring的特性在整合MyBatis方面体现的淋漓尽致哦 一.注解开发 以前跟老韩学习SE时他就说&#xff1a;注解本质是一个继承了Annotation 的特殊接口,其具体实…

智慧农业新纪元:解锁新质生产力,加速产业数字化转型

粮食安全乃国家之根本&#xff0c;“浙江作为农业强省、粮食生产重要省份&#xff0c;在维护国家粮食安全大局中肩负着重大使命。浙江粮食产业经济年总产值已突破4800亿元&#xff0c;稳居全国前列&#xff0c;然而&#xff0c;同样面临着规模大而不强、质量效益有待提升、数字…

C语言 ——— 打印水仙花数

目录 何为水仙花数 题目要求 代码实现 何为水仙花数 “水仙花数”是指一个n位数&#xff0c;其各位数字的n次方之和等于该数本身 如&#xff1a;153 1^3 5^3 3^3&#xff0c;则153就是一个“水仙花数” 题目要求 求出0~100000的所有“水仙花数”并输出 代码实现 #i…

深入探索 SQL 中的 LIKE 右模糊匹配(LIKE RIGHT)与左模糊匹配(LIKE LEFT)

引言 在数据库操作中&#xff0c;LIKE 子句是执行模糊搜索的强大工具&#xff0c;用于匹配列中的数据与指定的模式。本文将详细介绍 LIKE 子句中的两种常用模式&#xff1a;右模糊匹配&#xff08;LIKE RIGHT&#xff09;和左模糊匹配&#xff08;LIKE LEFT&#xff09;&#…

python实现自动更新prometheus规则

由于公司需要监控目标类型较多&#xff0c;不能手动去改动prometheus规则然后reload&#xff0c;所以就通过python写了个程序自动更新prometheus配置 基本环境准备 python 3.10.10flask 2.3.2prometheus 2.52.0 基本流程 将接口传来的prometheus规则信息保存到数据表中取数…

人工智能算法工程师(高级)课程1-单类目标识别之人脸检测识别技术MTCNN模型介绍与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(高级)课程1-单类目标识别之人脸检测识别技术MTCNN模型介绍与代码详解。本文深入探讨了基于PyTorch的人脸检测与识别技术&#xff0c;详细介绍了MTCNN模型、Siamese network以及center loss、sof…

11、实现基于共享内存的二叉树set

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 实现数组肯定不是我们的目标&a…

从数据库查询数据 写入Excel 写出JAVA代码

以下是一个示例代码,演示了如何从数据库中查询数据,然后将数据写入到Excel文件中: import java.io.FileOutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import org.apache.poi.ss.user…

PostgreSQL创建表和自增序列

一、创建表&#xff1a; 注意&#xff1a; 1、在mysql没有序列的概念&#xff0c;id自增通过auto_increment实现&#xff1b; 2、pgsql没有auto_increment的概念&#xff0c;如何实现id自增&#xff1f;有两种方式&#xff1a; 方式一&#xff1a;创建序列&#xff0c;绑定…

面经学习(杭州实在智能实习)

个人评价 秃狼觉得本次的面试是有史以来难度最大的&#xff0c;问了很多陌生的八股文&#xff0c;项目问的比较少&#xff0c;估计是项目本来就没有什么亮点&#xff0c;也是第一次被面试官说菜的面试。不过在后续的学习上还是收获颇丰的。 1.说说你在实习中遇到的难点吧&…

K8S内存资源配置

在 Kubernetes (k8s) 中&#xff0c;资源请求和限制用于管理容器的 CPU 和内存资源。配置 CPU 和内存资源时&#xff0c;使用特定的单位来表示资源的数量。 CPU 资源配置 CPU 单位&#xff1a;Kubernetes 中的 CPU 资源以 “核” (cores) 为单位。1 CPU 核心等于 1 vCPU/Core…

SpringBoot RestHighLevelClient 按版本更新

SpringBoot RestHighLevelClient 按版本更新 1 查询2 更新 RestHighLevelClient 是 Elasticsearch 提供的一个用于与 Elasticsearch 集群交互的高级 REST 客户端。它是基于 Java 的客户端&#xff0c;旨在提供一种简单且功能丰富的方式来执行各种 Elasticsearch 操作&#xff0…

2024年海峡两岸创业青年研学交流项目火热开展中

7月17日&#xff0c;由浙江外国语学院国际商学院、创业学院主办的“文化之舟系两岸&#xff0c;潮头勇立浙商旗”——2024年海峡两岸大学生&#xff08;创业青年&#xff09;研学交流项目持续进行中。 上午&#xff0c;邵波副教授带领学生代表接待来自台湾的二十多名学生参加“…

利用 PHP 解锁 1688 详情 API 接口的秘密

在电商领域的探索中&#xff0c;1688 平台的商品详情数据无疑是一座宝藏。而通过 PHP 语言来解锁 1688 详情 API 接口的秘密&#xff0c;将为我们开启获取这一宝藏的大门。 一、深入了解 1688 详情 API 接口 1688 详情 API 接口提供了丰富的商品信息&#xff0c;包括商品描述、…

Linux输出重定向到文件立即输出

./md.out > output.txt 2>&1程序中断时&#xff0c;文件为空的原因可能是由于缓冲机制。标准输出&#xff08;stdout&#xff09;和标准错误输出&#xff08;stderr&#xff09;默认是缓冲的&#xff0c;这意味着数据在写入文件之前会先存储在缓冲区中。如果程序在缓…

【人工智能】在未来智慧城市的建设及应用分析

作者主页: 知孤云出岫 目录 作者主页:案例分析&#xff1a;人工智能在未来智慧城市的建设及其影响和应用引言一、人工智能在智慧城市中的关键应用领域 案例分析&#xff1a;人工智能在未来智慧城市的建设及其影响和应用 引言 智慧城市是利用信息和通信技术&#xff08;ICT&am…