zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    linux每天一小步cp命令详解
    linux每天一小步ls命令详解
    linux每天一小步cd命令详解
    linux每天一小步rm命令详解
    linux每天一小步touch命令详解
    linux每天一小步mkdir命令详解
    input、textarea等输入框输入中文时,拼音在输入框内会触发input事件的问题
    (转)周志华:“深”为什么重要,以及还有什么深的网络
    CSS画行内分隔线
    百度之星资格赛E:C++ 与Java
  • 原文地址:https://www.cnblogs.com/YQAccelerator/p/7413811.html
Copyright © 2011-2022 走看看