CCF-CSP 34-2 矩阵重塑(其二)(reshape2)【C++】考点:矩阵转置模拟

题目

TUOJhttps://sim.csp.thusaac.com/contest/34/problem/1

思路

如果会写矩阵转置,这题很容易拿满

代码

可以让AI总结一下代码逻辑

1. 核心数据结构

  • A[N][N]:存储矩阵数据(最大 10000×10000)

  • p, q:实时记录矩阵的当前行数 和列数

  • n, m:初始行数、列数

  • t:操作次数

2. 三种操作类型

操作1:矩阵重塑(reshape)
  • 将当前 p×q 的矩阵按行优先展开成一维数组

  • 再按行优先填充到新的 a×b 矩阵中

  • 更新 p = a, q = b

操作2:矩阵转置
  • 将当前矩阵转置(行列互换)

  • 使用辅助矩阵 temp 完成转置

  • 更新 p, q(交换行列数)

操作3:矩阵查询
  • 直接输出 A[a][b] 位置的元素(下标从0开始)

3. 执行流程

  1. 读入初始矩阵大小 n, m 和操作次数 t

  2. 读入初始矩阵到 A

  3. 循环执行 t 次操作:

    • 根据 op 值执行对应操作

    • 操作1和2会改变矩阵形状和 p, q 的值

    • 操作3直接输出查询结果

4. 关键特点

  • 动态形状:矩阵的行列数会随操作变化

  • 原地修改 :操作1和2都直接修改 A 矩阵

  • 实时记录 :p, q 始终记录当前矩阵的实际大小

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
int n,m,t, p, q; //p,q是真实的行/列 
const int N=1e4+5; //warn : 必须const 
int A[N][N];

void print()
{
    for(int i=0;i<p;i++)
    {
        for(int j=0;j<q;j++)
            cout<<A[i][j]<<" ";
        cout<<endl;
    }
}

void solve()
{
    cin>>n>>m>>t;
    p=n, q=m;
    for(int i=0;i<p;i++)
        for(int j=0;j<q;j++)
            cin>>A[i][j];
    while(t--)
    {
        int op,a,b; cin>>op>>a>>b;
        if(op==1) //如果op==3时直接通过一维数组查询,这里改下p和q即可
        {
            int temp[p*q+5]={};
            int cnt=0;
            for(int i=0;i<p;i++)
                for(int j=0;j<q;j++)
                    temp[cnt++]=A[i][j];
            cnt=0;
            for(int i=0;i<a;i++)
                for(int j=0;j<b;j++)
                    A[i][j]=temp[cnt++];
            p=a, q=b;
//			print();
        }
        if(op==2)
        {
            
			//int temp[N][N]={}; //warn: N*N 太大了,本地跑不起来,oj上TLE只能80分,但是去掉"={}"是100 
			int temp[p][q]={};
			for(int i=0;i<p;i++)
				for(int j=0;j<q;j++)
					temp[i][j]=A[i][j];
			for(int i=0;i<q;i++)
				for(int j=0;j<p;j++)
					A[i][j]=temp[j][i];
			swap(p,q);
//			print();
        }
        if(op==3)
        {
            cout<<A[a][b]<<endl;
        }
    }
}

int main()
{
    ios::sync_with_stdio(0), cin.tie(0);
    solve();
    return 0; 
}
相关推荐
老师我太想进步了20261 分钟前
【数据结构-1】例解算法复杂度
数据结构·算法
tyler_download16 分钟前
deepseek后训练算法:位置编码算法RoPE详解1
算法
熊猫钓鱼>_>22 分钟前
三方库 NDK 原生模块跨平台适配与调试【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙心迹
A7bert77722 分钟前
【MobileSAM部署至RK3588】环境适配→转换RKNN→开发板部署
c++·人工智能·深度学习·目标检测·ubuntu
HANDY0920028 分钟前
从“不照人”到“剂量达标”:扇叶遮挡式UV-C空气消毒的工程边界与可验证评估框架
开发语言·人工智能·嵌入式硬件·智能家居
青少儿编程课堂38 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会C/C++考级:分层图最短路解析
c++·python·算法·bfs·信息学竞赛
YSL0701241 小时前
一文通关-----排序
数据结构·算法
1024奇点10 小时前
【仓颉语言入门 · 第二篇 第 22 课】
开发语言·ide·开源
Warren2Lynch10 小时前
C4 模型详解:利用 Visual Paradigm 可视化软件架构的综合指南
开发语言·uml
FlightYe11 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频