Problem A: 矩阵转换
Description
【题目背景】
矩阵(二维)的转换(reshape)操作是指改变矩阵的行数和列数,同时保持矩阵中元素的总数不变。
【题目描述】
矩阵的转换操作可以具体定义为以下步骤:
设原矩阵为 M,其维度为 n×m,即有 n 行和 m 列。新矩阵为 M′,其维度为 p×q。重塑操作要满足 n×m=p×q,这保证了元素的总数不变。
1、线性化原矩阵:按照行优先的顺序,将原矩阵 M 的元素转换成一个长度为 n×m 的一维数组 A。这意味着你先读取 M 的第 0 行元素,然后是第 1 行,依此类推,直到最后一行。
2、填充新矩阵:使用一维数组 A 中的元素按照行优先的顺序填充新矩阵 M′。首先填充 M′ 的第 0 行,直到该行有 q 个元素,然后继续填充第 1 行,直到所有 p 行都被填满。
给定原矩阵中的一个元素的位置 (i,j)(0≤i<n 且0≤j<m),我们可以找到这个元素在被线性化后的一维数组 A 中的位置 k(0≤k<n×m),然后确定它在新矩阵 M′ 中的位置 (i′,j′)(0≤i′<p 且 0≤j<q)。它们之间满足如下数学关系:i×m+j=k=i′×q+j′
给定 n×m 的矩阵 M 和目标形状 p、q,试将 M 重塑为 p×q 的矩阵 M′。
【输入格式】
输入共 n+1 行。
输入的第一行包含四个正整数 n、m 和 p、q。
接下来依次输入原矩阵 M 的第 0 到第 n−1 行,每行包含 m 个整数,按列下标从 0 到 m−1 的顺序依次给出。
【输出格式】
输出共 p 行,每行 q 个整数,表示重塑后的矩阵 M′。
输出格式与输入相同,即依次输出 M′ 的第 0 行到第 p−1 行;行内按列下标从 0 到 q−1 的顺序输出,且两个整数间仅用一个空格分隔。
【输入样例】
2 3 3 2
1 2 3
4 5 6
【输出样例】
1 2
3 4
5 6
【子任务】
全部的测试数据满足:
n、m 和 p、q 均为正整数且 n×m=p×q≤10000;
输入矩阵中每个元素的绝对值不超过 1000。
Input
输入共 n+1 行。
输入的第一行包含四个正整数 n、m 和 p、q。
接下来依次输入原矩阵 M 的第 0 到第 n−1 行,每行包含 m 个整数,按列下标从 0 到 m−1 的顺序依次给出。
Output
输出共 p 行,每行 q 个整数,表示重塑后的矩阵 M′。
输出格式与输入相同,即依次输出 M′ 的第 0 行到第 p−1 行;行内按列下标从 0 到 q−1 的顺序输出,且两个整数间仅用一个空格分隔。
Sample Input Copy
2 3 3 2
1 2 3
4 5 6
Sample Output Copy
1 2
3 4
5 6