zoukankan      html  css  js  c++  java
  • 洛谷 P3585 [POI2015]PIE

    题目描述

    一张n*m的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色。你有一个a*b的印章,有些格子是凸起(会沾上墨水)的。你需要判断能否用这个印章印出纸上的图案。印的过程中需要满足以下要求:(1)印章不可以旋转。(2)不能把墨水印到纸外面。(3)纸上的同一个格子不可以印多次。

    输入输出格式

    输入格式:

     

    第一行一个整数q(1<=q<=10),表示测试点数量。接下来q个测试点,每个测试点中:第一行包含4个整数n,m,a,b(1<=n,m,a,b<=1000)。接下来n行,每行m个字符,描述纸上的图案。'.'表示留白,'x'表示需要染黑。接下来a行,每行b个字符,描述印章。'.'表示不沾墨水,'x'表示沾墨水。

     

    输出格式:

     

    对于每个测试点,输出TAK(是)或NIE(否)。

     

    输入输出样例

    输入样例#1:
    2
    3 4 4 2
    xx..
    .xx.
    xx..
    x.
    .x
    x.
    ..
    2 2 2 2
    xx
    xx
    .x
    x.
    输出样例#1:
    TAK
    NIE
     

    说明

    一张n*m的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色。

    你有一个a*b的印章,有些格子是凸起(会沾上墨水)的。你需要判断能否用这个印章印出纸上的图案。印的过程中需要满足以下要求:

    (1)印章不可以旋转。

    (2)不能把墨水印到纸外面。

    (3)纸上的同一个格子不可以印多次。

    思路:模拟。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;
    int tx,ty,num,n,m,a,b,cou,top;
    int map[1010][1010],gzx[1000010],gzy[1000010],yzx[1000010],yzy[1000010];
    char ch[1010];
    bool flag;
    bool judge(int x,int y) {
        for(int i=1;i<=cou;i++){
            tx=x+yzx[i];ty=y+yzy[i];
            if(tx>n||ty>m||!tx||!ty)    return 0;
            if(!map[tx][ty])    return 0;
            else     map[tx][ty]=0;
        }
        return 1;
    }
    int main(){
        scanf("%d",&num);
        while(num--){
            memset(map,0,sizeof(map));
            scanf("%d%d%d%d",&n,&m,&a,&b);
            top=cou=0;
            for(int i=1;i<=n;i++){
                scanf("%s",ch+1);
                for(int j=1;j<=m;j++)
                    if(ch[j]=='x'){
                        top++;
                        gzx[top]=i; 
                        gzy[top]=j;
                        map[i][j]=top; 
                    }
            }
            for(int i=1;i<=a;i++){
                scanf("%s",ch+1);
                for(int j=1;j<=b;j++)
                    if(ch[j]=='x'){
                        if(!cou)    tx=i,ty=j; 
                        cou++;
                        yzx[cou]=i-tx; 
                        yzy[cou]=j-ty;
                    }
            }
            flag=0;
            for(int i=1;i<=top;i++)
                if(map[gzx[i]][gzy[i]])
                    if(!judge(gzx[i],gzy[i])){
                        puts("NIE");
                        flag=1;break;
                    }
            if(!flag)
            puts("TAK");
        }
        return 0;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    使用FileReader在浏览器读取预览文件(image和txt)
    移动端Vue图片获取,压缩,预览组件-upload-img(H5+获取照片,压缩,预览)
    文件(图片)转base64
    Vue单页面应用打包app处理返回按钮
    hbuilder/hbuilderx 无法检测到模拟器
    不启动AndroidStudio直接启动其模拟器
    ES6,箭头函数 (=>)注意点
    ES6,扩展运算符
    strcmp使用注意
    android11 gc5035前置摄像头当作后置使用左右镜像问题
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7693311.html
Copyright © 2011-2022 走看看