#6812. 矩阵变幻
矩阵变幻
题目背景
小蓝学习了二维数组的基础操作后,设计了一套有趣的矩阵变换流程。他发现通过这些简单的步骤,可以将一个矩阵变得“面目全非”。现在请你帮他模拟这个过程。
题目描述
给定一个 行 列的整数矩阵 ,依次执行以下全部操作:
- 转置:将矩阵 转置,得到大小为 的新矩阵 。
- 垂直翻转:将 上下翻转(即第一行与最后一行交换,第二行与倒数第二行交换,以此类推)。
- 行滚动:对于上一步得到的矩阵,将它的第 行( 从 开始)的所有元素循环左移 个位置。
例如第 行循环左移 位,保持不变;第 行循环左移 位;第 行循环左移 位……如果左移位数超过该行的长度,则对行长度取模后再移动。 - 蛇形重排:将上一步得到的矩阵按照蛇形遍历的顺序取出一维序列:第一行从左到右,第二行从右到左,第三行从左到右,第四行从右到左……以此类推。
然后将这个序列按照列优先的顺序依次填入一个 行 列的矩阵 (先填满第 列从上到下,再填第 列……)。题目保证 恰好等于当前矩阵的元素总数(即 )。 - 边界求和:计算最终矩阵 的边界元素和。边界元素指位于第 行、第 行、第 列、第 列的所有元素。如果一个元素同时属于行边界和列边界(即四个角上的元素),只计算一次。
现在给定 以及矩阵 ,请你输出最终的矩阵 和它的边界元素和。
输入格式
第一行包含四个整数 ,分别表示原始矩阵的行数、列数,以及最终矩阵的行数、列数。
接下来 行,每行 个整数,表示矩阵 的元素。同一行的整数之间用空格分隔。
输出格式
首先输出 行,每行 个整数,表示最终矩阵 ,同一行的整数之间用一个空格隔开。
最后输出一行一个整数,表示矩阵 的边界元素之和。
样例 #1
样例输入 #1
2 3 2 3
1 2 3
4 5 6
样例输出 #1
3 2 1
6 5 4
21
提示
【样例解释】
原始矩阵 ():
1 2 3
4 5 6
- 转置得到 矩阵:
1 4
2 5
3 6
- 垂直翻转后:
3 6
2 5
1 4
- 行滚动:第 行左移 位:
3 6;第 行左移 位:5 2;第 行左移 位(对长度 取模后等于左移 位):1 4。得到矩阵:
3 6
5 2
1 4
- 蛇形遍历:第 行从左到右得
3, 6;第 行从右到左得2, 5;第 行从左到右得1, 4。序列为[3, 6, 2, 5, 1, 4]。
按列优先填入 矩阵:第 列3, 6;第 列2, 5;第 列1, 4。得到 :
3 2 1
6 5 4
- 边界元素:该矩阵一共 行 列,所有元素都在边界上,和为 。
【数据范围】
对于 的数据,,且 。
矩阵中的元素均为整数,绝对值不超过 。