[洛谷]P2191 小Z的情书
题目背景
众所周知,小Z是高富帅的典范和代表,所以他很很多很多的妹纸。小Z要写情书给他的妹纸了,作为一个谨慎的人,他当然不会直白的写在纸上(否则被那群损友发现岂不糟了?)。
题目描述
虽然小Z谨小慎微,但是还是被狡猾的小D给发现了其中的玄机。作为一个大方的人,小D自然要把这个秘密拿出来给大家共享啦~小Z开始有两张$$N \times N$$大小的纸一张是透明的、一张是有字的。然后小Z把透明的纸上有些格子涂黑了。接着把这两张纸一起给他的妹纸,妹纸事先和小Z约定好了,按照如下方法阅读:首先先把透明的纸盖在另一张纸上,然后把露出来的字母从上到下从左到右写下来,然后转个90度,再读一遍……这样子一共读四遍……详见样例。
小D不知从哪把情书弄来了,请大家一起来欣赏,顺便请大家把内容打出来看看。
输入输出格式
输入格式
第1行,一个整数N;
第2到第N+1行,每行N个字符,代表skj的透明纸,“O”没有涂黑的地方,“#”代表被涂黑的地方;
第N+2到第2N+1行,每行N个字符,仅包含大写字母,如描述中所示,是另一张纸。
输出格式
一行,情书的内容。
输入输出样例
输入样例1
4
##O#
#O#O
####
###O
ARAO
PCEM
LEEN
TURC
输出样例1
ACMCENTRALEUROPE
说明
【数据规模】
1<=N<=1000
思路
模拟
二维矩阵旋转:
顺时针旋转角度 | 矩阵坐标 |
---|---|
0°(360°) | (i,j) |
90° | (j,n-i-1) |
180° | (n-i-1,n-j-1) |
270° | (n-j-1,i) |
代码
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int n;
char le[1010][1010];
char flag[1010][1010];
int main()
{
freopen("loveletter.in","r",stdin);
freopen("loveletter.out","w",stdout);
cin>>n;
char ch;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
cin>>ch;
flag[i][j]=ch;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
cin>>ch;
le[i][j]=ch;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(flag[i][j]=='O')
cout<<le[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(flag[n-j+1][i]=='O')
cout<<le[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(flag[n-i+1][n-j+1]=='O')
cout<<le[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(flag[j][n-i+1]=='O')
cout<<le[i][j];
return 0;
}