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; 
}
相关推荐
AI小老六2 小时前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
后端·算法·ai编程
胡萝卜术2 小时前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
Asize3 小时前
初识DFS 与 BFS:递归、队列与图遍历
算法
罗西的思考16 小时前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
美团技术团队20 小时前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
用户805533698031 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
To_OC2 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC2 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK2 天前
线段树维护区间 k 次方和
c++·数学·算法·stl