#37. 矩阵重塑(其一)

矩阵重塑(其一)

题目背景

矩阵(二维)的重塑(reshape)操作是指改变矩阵的行数和列数,同时保持矩阵中元素的总数不变。

题目描述

矩阵的重塑操作可以具体定义为以下步骤:

设原矩阵为 MM,其维度为 n×mn\times m,即有 nn 行和 mm 列。新矩阵为 MM',其维度为 p×qp\times q。重塑操作要满足 n×m=p×qn\times m=p\times q,这保证了元素的总数不变。

  1. 线性化原矩阵​:按照行优先的顺序,将原矩阵 MM 的元素转换成一个长度为 n×mn\times m 的一维数组 AA。这意味着你先读取 MM 的第 00 行元素,然后是第 11 行,依此类推,直到最后一行。
  2. 填充新矩阵​:使用一维数组 AA 中的元素按照行优先的顺序填充新矩阵 MM'。首先填充 MM' 的第 00 行,直到该行有 qq 个元素,然后继续填充第 11 行,直到所有 pp 行都被填满。

给定原矩阵中的一个元素的位置 (i,j)(i,j)0i<n0\le i<n0j<m0\le j<m),我们可以找到这个元素在被线性化后的一维数组 AA 中的位置 kk0k<n×m0\le k<n\times m),然后确定它在新矩阵 MM' 中的位置 (i,j)(i',j')0i<p0\le i'<p0j<q0\le j'<q)。它们之间满足如下数学关系:

i×m+j=k=i×q+ji\times m+j=k=i'\times q+j'

给定 n×mn\times m 的矩阵 MM 和目标形状 ppqq,试将 MM 重塑为 p×qp\times q 的矩阵 MM'

输入格式

从标准输入读入数据。

输入共 n+1n+1 行。

输入的第一行包含四个正整数 nnmmppqq

接下来依次输入原矩阵 MM 的第 00 到第 n1n−1 行,每行包含 mm 个整数,按列下标从 00m1m−1 的顺序依次给出。

输出格式

输出到标准输出。

输出共 pp 行,每行 qq 个整数,表示重塑后的矩阵 MM'。输出格式与输入相同,即依次输出 MM' 的第 00 行到第 p1p−1 行;行内按列下标从 00q1q−1 的顺序输出,且两个整数间仅用一个空格分隔。

样例1输入

2 3 3 2
1 2 3
4 5 6

样例1输出

1 2
3 4
5 6

样例2输入

2 2 1 4
6 6
6 6

样例2输出

6 6 6 6

子任务

全部的测试数据满足:

  • nnmmppqq 均为正整数且 n×m=p×q104n\times m=p\times q\le 10^4
  • 输入矩阵中每个元素的绝对值不超过 10001000