总时间限制: 1000ms 内存限制: 65536kB描述
给定m行n列的图像各像素点灰度值,对其依次进行一系列操作后,求最终图像。
其中,可能的操作及对应字符有如下四种:
A:顺时针旋转90度;
B:逆时针旋转90度;
C:左右翻转;
D:上下翻转。
输入第一行包含两个正整数m和n,表示图像的行数和列数,中间用单个空格隔开。1 <= m <= 100, 1 <= n <= 100。 接下来m行,每行n个整数,表示图像中每个像素点的灰度值,相邻两个数之间用单个空格隔开。灰度值范围在0到255之间。 接下来一行,包含由A、B、C、D组成的字符串s,表示需要按顺序执行的操作序列。s的长度在1到100之间。输出m'行,每行包含n'个整数,为最终图像各像素点的灰度值。其中m'为最终图像的行数,n'为最终图像的列数。相邻两个整数之间用单个空格隔开。样例输入
2 3
10 0 10
100 100 10
AC
样例输出
10 100
0 100
10 10
1 #include<iostream>
2 #include<cstring>
3 #include<cstdio>
4 #include<cmath>
5 #include<queue>
6 #include<vector>
7 #include<algorithm>
8 using namespace std;
9 int n,m;
10 int c[1001][1001];
11 int b[1001][1001];
12 char zx[101];
13 void zh(char a)
14 {
15 if(a=='A')
16 {
17 for(int i=1;i<=n;i++)
18 {
19 for(int j=1;j<=m;j++)
20 {
21 b[j][n-i+1]=c[i][j];
22 }
23 }
24 }//顺时针旋转90度
25 if(a=='B')
26 {
27 for(int i=1;i<=n;i++)
28 {
29 for(int j=1;j<=m;j++)
30 {
31 b[m-j+1][i]=c[i][j];
32 }
33 }
34 }//逆时针旋转90度
35 if(a=='C')
36 {
37 for(int i=1;i<=n;i++)
38 {
39 for(int j=1;j<=m;j++)
40 {
41 b[i][m-j+1]=c[i][j];
42 }
43 }
44 }//左右翻转
45 if(a=='D')
46 {
47 for(int i=1;i<=n;i++)
48 {
49 for(int j=1;j<=m;j++)
50 {
51 b[n-i+1][j]=c[i][j];
52 }
53 }
54 }//上下翻转
55 memcpy(c,b,sizeof(c));
56 if(a=='A'||a=='B')swap(m,n);
57 }
58 int main()
59 {
60 cin>>n>>m;
61 for(int i=1;i<=n;i++)
62 {
63 for(int j=1;j<=m;j++)
64 {
65 cin>>c[i][j];
66 }
67 }
68 scanf("%s",&zx);
69 for(int i=0;i<strlen(zx);i++)
70 {
71 zh(zx[i]);
72 }
73 for(int i=1;i<=n;i++)
74 {
75 for(int j=1;j<=m;j++)
76 {
77 cout<<c[i][j]<<" ";
78 }
79 cout<<endl;
80 }
81 return 0;
82 }