题意:
两张n*m的纸。一张透明纸,上面有些地方是黑的,有些地方是透明的。另一张纸上写满了字母。
你需要将透明纸放在写字的纸上,分别顺时针旋转0°、90°、180°、270°,每次从上到下、从左到右写下露出的字符,四次之后所得到的字符串即为答案。
题解:
模拟即可。
4个双重for循环,每个循环内四个坐标i,j,a,b,分别为透明纸的行列和写字的纸的行列。
AC Code:
1 #include <iostream>
2 #include <stdio.h>
3 #include <string.h>
4 #define MAX_N 1005
5
6 using namespace std;
7
8 int n;
9 char p[MAX_N][MAX_N];
10 char c[MAX_N][MAX_N];
11 string s;
12
13 void read()
14 {
15 cin>>n;
16 for(int i=0;i<n;i++)
17 {
18 for(int j=0;j<n;j++)
19 {
20 cin>>p[i][j];
21 }
22 }
23 for(int i=0;i<n;i++)
24 {
25 for(int j=0;j<n;j++)
26 {
27 cin>>c[i][j];
28 }
29 }
30 }
31
32 void solve()
33 {
34 for(int i=0,a=0;a<n;i++,a++)
35 {
36 for(int j=0,b=0;b<n;j++,b++)
37 {
38 if(p[i][j]=='O') s+=c[a][b];
39 }
40 }
41 for(int j=0,a=0;a<n;j++,a++)
42 {
43 for(int i=n-1,b=0;b<n;i--,b++)
44 {
45 if(p[i][j]=='O') s+=c[a][b];
46 }
47 }
48 for(int i=n-1,a=0;a<n;i--,a++)
49 {
50 for(int j=n-1,b=0;b<n;j--,b++)
51 {
52 if(p[i][j]=='O') s+=c[a][b];
53 }
54 }
55 for(int j=n-1,a=0;a<n;j--,a++)
56 {
57 for(int i=0,b=0;b<n;i++,b++)
58 {
59 if(p[i][j]=='O') s+=c[a][b];
60 }
61 }
62 }
63
64 void print()
65 {
66 cout<<s<<endl;
67 }
68
69 int main()
70 {
71 freopen("loveletter.in","r",stdin);
72 freopen("loveletter.out","w",stdout);
73 read();
74 solve();
75 print();
76 }