[洛谷]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;
}

results matching ""

    No results matching ""