2017SN多校D1T1 loveletter:模拟

题意:

  两张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 }
原文地址:https://www.cnblogs.com/Leohh/p/7401601.html