题目:

一张n*m的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色。
你有一个a*b的印章,有些格子是凸起(会沾上墨水)的。你需要判断能否用这个印章印出纸上的图案。印的过程中需要满足以下要求:
(1)印章不可以旋转。
(2)不能把墨水印到纸外面。
(3)纸上的同一个格子不可以印多次。
思路:
可以先把印章中的凸起先提取出来单独存储,然后遍历这张方格纸,如果遇上x就把存起来的凸起印刷到方格纸上,印刷过程中如果遇到出界、方格纸不是x或者已经印刷过的情况,就是不能完成印刷。
如果全部印刷完就是成功。
代码:
#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#define MAX 1000000000
#define inf 0x3f3f3f3f
#define FRE() freopen("in.txt","r",stdin) using namespace std;
typedef unsigned long long ll;
const int maxn = ;
char paper[maxn][maxn],board[maxn][maxn];
int vis[maxn][maxn];
int n,m,a,b;
vector<pair<int,int> > pi; bool isin(int x,int y)
{
return x>= && x<n && y>= && y<m;
} bool solve()
{
for(int i=; i<n; i++)
{
for(int j=; j<m; j++)
{
if(paper[i][j]=='x' && !vis[i][j])//对纸张上出现的x进行一次印章印刷
{
for(int k=; k<pi.size(); k++)
{
int tx = i+pi[k].first, ty = j+pi[k].second;
if(isin(tx,ty) && !vis[tx][ty] && paper[tx][ty]=='x')
vis[tx][ty]++;
else//如果遇到不符合的情况就不能完成印刷
return false;
}
}
}
}
return true;
} int main()
{
//FRE();
int kase;
scanf("%d",&kase);
while(kase--)
{
pi.clear();
memset(vis,,sizeof(vis));
scanf("%d%d%d%d",&n,&m,&a,&b);
for(int i=; i<n; i++)
scanf("%s",paper[i]); bool isfirst = true;
for(int i=; i<a; i++)
{
scanf("%s",board[i]);
for(int j=; j<b; j++)//提取出印章上所有的凸起
{
if(board[i][j]=='x' && isfirst)
{
pi.push_back(make_pair(i,j));
isfirst = false;
}
else if(board[i][j]=='x')
pi.push_back(make_pair(i-pi[].first,j-pi[].second));//存凸起相对于第一个的相对位置
}
}
pi[].first = pi[].second = ;
if(solve())
printf("TAK\n");
else
printf("NIE\n");
}
return ;
}

最新文章

  1. java保留两位小数4种方法
  2. 使用zfs进行pg的pitr恢复测试
  3. JavaScript学习笔记——变量和数据类型
  4. PostgreSQL中字符串相关问题
  5. ExtJS MVC学习手记 2
  6. 使用ckplayer搭建rtmp视频直播应用
  7. 一个可视化的retrospective网站
  8. (原+转)ROC曲线
  9. eclipse出现错误:he type java.util.Map$Entry cannot be resolved. It is indirectly referenced
  10. 斜率优化dp 的简单入门
  11. 蓝桥杯——X星球居民问题
  12. JS事件(四)坐标位置
  13. 网络基础、ftp任务(进度条、计算文件大小、断点续传、搭建框架示例)
  14. 分享一个 jsPDF的简单使用以及中文编码问题的解决
  15. linux下热插拔事件的产生是怎样通知到用户空间,kobject_uevent_env之uevent【转】
  16. TypeScript的HTML5游戏
  17. Android动画知识汇总
  18. comet4j推送 405/500 JSON转换异常
  19. 【转】snmpwalk常用用法
  20. 20155316 2016-2017-2 《Java程序设计》第3周学习总结

热门文章

  1. maven中添加json-lib的jar包
  2. logback 使用详解 (转)
  3. wamp的手动安装
  4. [笔记]如何将已存在的JAVA添加到当前ECLIPSE JAVA工程中
  5. E20170520-ts
  6. bzoj 4820: [Sdoi2017]硬币游戏【kmp+高斯消元】
  7. JQuery-Validate明明配置好了但是不生效?卡了2个小时的bug解决了,原因很简单。
  8. DFS Gym 100553J Jokewithpermutation
  9. Service官方教程(4)两种Service的生命周期函数
  10. HTML5的音频播放和视频播放