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++常用的STL
c++·算法
weilx12341 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读1 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
猎头南楼1 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
Smileyqp沛沛1 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车1 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光1 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark1 天前
大规模并行计算中的负载均衡算法研究4
算法
吞下星星的少年·-·1 天前
C++ 萌新语法入门篇
c++·算法比赛