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

 

posted @ 2017-10-19 16:32  一蓑烟雨任生平  阅读(192)  评论(0编辑  收藏  举报