Luogu P2129 小Z的情书
题目
【题目背景】
众所周知,小Z是高富帅的典范和代表,所以他很很多很多的妹纸。小Z要写情书给他的妹纸了,作为一个谨慎的人,他当然不会直白的写在纸上(否则被那群损友发现岂不糟了?)。
【题目描述】
虽然小Z谨小慎微,但是还是被狡猾的小D给发现了其中的玄机。作为一个大方的人,小D自然要把这个秘密拿出来给大家共享啦~小Z开始有两张N*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 \leq N \leq 1000\)
思路
模拟,注意旋转90°的公式。
代码
#include#include #include #include #include #include #define FILE freopen("loveletter.in","r",stdin);freopen("loveletter.out","w",stdout);using namespace std;const int maxn=1000+5;inline int read() { int ans=0,flag=1; char ch=getchar(); while(ch<'0' || ch>'9') { if(ch=='-') flag=-1; ch=getchar(); } while(ch>='0' && ch<='9') { ans=ans*10+(int)(ch-'0'); ch=getchar(); } return ans*flag;}int n,cnt=1;char card[maxn][maxn];char lov[maxn][maxn];char ans[maxn*maxn*4];inline void print(bool a) { if(a) { for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) cout< >n; for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) cin>>card[i][j]; for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) cin>>lov[i][j]; check(); change90(); check(); change90(); check(); change90(); check(); return 0;}