#G4002. 图像变换

    ID: 1039 传统题 1000ms 512MiB 尝试: 5 已通过: 3 难度: 普及− 上传者: 标签>GESP四级二维数组函数模拟2026模拟

图像变换

题目描述

一张黑白照片可以看成一个 nn 行 mm 列的整数矩阵,每个整数是一个像素的灰度值。

小 G 在写一个简单的修图软件,它支持下面四种操作,每种操作用一个大写字母表示:

字母 操作 说明
R 顺时针旋转 90°90° nn 行 mm 列的图像会变成 mm 行 nn 列
L 逆时针旋转 90°90°
H 左右翻转 每一行的顺序前后颠倒,行数列数不变
V 上下翻转 各行的顺序前后颠倒,行数列数不变

给定原始图像和一串操作,请按从左到右的顺序依次执行这些操作,输出最终的图像。

输入格式

第一行两个整数 n,mn, m,表示图像的行数和列数。

接下来 nn 行,每行 mm 个整数,表示每个像素的灰度值。

最后一行一个由 R、L、H、V 组成的字符串 ss,表示依次执行的操作。

输出格式

第一行两个整数,表示最终图像的行数和列数,中间用一个空格隔开。

接下来按行输出最终的图像,每行的相邻两个整数之间用一个空格隔开。

样例 #1

样例输入 #1

2 3
1 2 3
4 5 6
RH

样例输出 #1

3 2
1 4
2 5
3 6

样例解释

原图是 22 行 33 列。顺时针旋转 90°90° 后变成 33 行 22 列:

4 1
5 2
6 3

再左右翻转,每一行前后颠倒,得到样例输出。

样例 #2

样例输入 #2

3 4
1 2 3 4
5 6 7 8
9 10 11 12
LH

样例输出 #2

4 3
12 8 4
11 7 3
10 6 2
9 5 1

样例解释

逆时针旋转 90°90° 后,原来的最后一列 4,8,124, 8, 12 变成了第一行,图像变成 44 行 33 列;再左右翻转得到样例输出。

提示

数据范围

  • 对于 30%30\% 的数据:n=mn = m,且 ss 中只有 H 和 V;
  • 对于 60%60\% 的数据:n=mn = m;
  • 对于 100%100\% 的数据:1≤n,m≤1001 \le n, m \le 100,1≤∣s∣≤1001 \le |s| \le 100,每个灰度值都是 0∼2550 \sim 255 的整数。

提示

  • 原地修改很容易把还没用到的数据覆盖掉。可以先把变换结果写到另一个二维数组里,再整体抄回去。
  • 每种操作写成一个函数,主函数只负责读入、按字母调用函数和输出,程序会清楚很多。