Luogu P2129 小Z的情书

Luogu P2129 小Z的情书

2333


题目

【题目背景】

众所周知,小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<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#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<<card[i][j];
            cout<<endl;
        }
    } else {

    }
}
inline void change90() {
    char temp[maxn][maxn];
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            temp[j][n-i+1]=card[i][j];
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            card[i][j]=temp[i][j];
}
inline void check() {
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=n; j++) {
            if(card[i][j]=='O')
                cout<<lov[i][j];
        }
    }
}
int main() {
    ios::sync_with_stdio(false);
    cin>>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;
}
原文地址:https://www.cnblogs.com/YQAccelerator/p/7413811.html