矩阵重塑(其一)
把矩阵按行优先展平成一维序列,再按新矩阵的列数重新解释每个元素的位置。
OJ: shumeng
题目 ID: CSP202406A
难度:入门
标签:模拟矩阵
日期: 2026-07-31 16:21
形式化题目
给定一个
按行优先顺序读取原矩阵的元素,再按行优先顺序填入
思路
行优先重塑不会改变元素在一维线性序列中的顺序,本质是“换一种方式解释同一串数据”。
保存线性序列
按行优先依次读入全部 value。
用新列数定位
新矩阵第 value[i * q + j] 即可。
代码
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-07-31 16:21
* update_at: 2026-08-17 22:39
*/
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10005;
int value[MAXN]; // 行优先顺序读取的线性序列
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m, p, q;
cin >> n >> m >> p >> q;
for (int i = 0; i < n * m; i++) cin >> value[i];
// 重塑不改变行优先线性顺序,只需按新列数 q 重新解释下标
for (int i = 0; i < p; i++) {
for (int j = 0; j < q; j++) {
if (j > 0) cout << ' ';
cout << value[i * q + j];
}
cout << '\n';
}
return 0;
}复杂度
- 时间:每个元素读取与输出一次,时间复杂度
。 - 空间:保存整个线性序列,空间复杂度
。
总结
矩阵重塑只改变二维下标,不改变行优先线性顺序。先固定线性序号,再用新列数