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; 
}
相关推荐
二年级程序员1 小时前
一篇文章掌握“队列”
c语言·数据结构·算法
一叶之秋14121 小时前
窗口基石:掌控 Qt 界面的无限形态
开发语言·qt
ArturiaZ1 小时前
【day33】
算法
马猴烧酒.2 小时前
【JAVA算法|hot100】堆类型题目详解笔记
java·开发语言·笔记
Drifter_yh2 小时前
「JVM」Java 垃圾回收机制全解析:回收算法、分代流转与 G1 收集器底层拆解
java·jvm·算法
载数而行5202 小时前
算法系列3之拓扑排序
c语言·数据结构·c++·算法·排序算法
天一生水water2 小时前
LangChain的智能体教程
开发语言·人工智能·langchain·php·智慧油田
!停2 小时前
数据结构排序算法—插入排序
数据结构·算法·排序算法
s砚山s2 小时前
代码随想录刷题——二叉树篇(二十一)
算法