题目描述
给定 m m m 行 n n n 列的图像各像素点灰度值,对其依次进行一系列操作后,求最终图像。
其中,可能的操作及对应字符有如下四种:
A
A
A:顺时针旋转
90
90
90 度。
B
B
B:逆时针旋转
90
90
90 度。
C
C
C:左右翻转。
D
D
D:上下翻转。
输入格式
第一行包含两个正整数
m
m
m 和
n
n
n ,表示图像的行数和列数,中间用单个空格隔开。
接下来
m
m
m 行,每行
n
n
n 个整数,表示图像中每个像素点的灰度值,相邻两个数之间用单个空格隔开。灰度值范围在
0
0
0 到
255
255
255 之间。
接下来一行,包含由
A
,
B
,
C
,
D
A,B,C,D
A,B,C,D 组成的字符串
s
s
s ,表示需要按顺序执行的操作序列。
输出格式
输出共 m ′ m' m′ 行,每行包含 n ′ n' n′ 个整数,为最终图像各像素点的灰度值。其中 m ′ m' m′ 为最终图像的行数, n ′ n' n′ 为最终图像的列数。相邻两个整数之间用单个空格隔开。
样例
样例输入1:
2 3
10 0 10
100 100 10
AC
样例输出1:
10 100
0 100
10 10
数据范围
对于
40
%
40\%
40% 的数据,
s
s
s 中只有字符
A
A
A 。
对于
100
%
100\%
100% 的数据,
1
≤
m
≤
100
,
1
≤
n
≤
100
1 \le m \le 100,1 \le n \le 100
1≤m≤100,1≤n≤100 ,
s
s
s 的长度不超过
100
100
100 。
题解
直接模拟即可。
几种操作:
void solve1(){//A
swap(n, m);
for(int i = 1; i <= n; ++ i){
for(int j = 1; j <= m; ++ j){
b[i][j] = a[m - j + 1][i];
}
}
}
void solve2(){//B
swap(n, m);
for(int i = 1; i <= n; ++ i){
for(int j = 1; j <= m; ++ j){
b[i][j] = a[j][n - i + 1];
}
}
}
void solve3(){//C
for(int i = 1; i <= n; ++ i){
for(int j = 1; j <= m; ++ j){
b[i][j] = a[i][m - j + 1];
}
}
}
void solve4(){//D
for(int i = 1; i <= n; ++ i){
for(int j = 1; j <= m; ++ j){
b[i][j] = a[n - i + 1][j];
}
}
}
void solve(){//搬回来
for(int i = 1; i <= n; ++ i){
for(int j = 1; j <= m; ++ j){
a[i][j] = b[i][j];
}
}
}