题面

发现好像没有什么好做法,那就模拟么=。=

以印章左上角的'x'为基准,记录印章上'x'的相对位置模拟。记录相对位置是因为可能有这种情况↓

直接模拟是会漏掉的=。=

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=;
int mapp[M][M],pos[N*N][];
int n,m,a,b,T,cnt,firx,firy;
char rd[N];
inline void i207M()
{
cnt=,firx=firy=-;
memset(mapp,,sizeof mapp);
}
inline bool judge()
{
register int i,j;
for(i=;i<=n;i++)
for(j=;j<=m;j++)
if(mapp[i][j]) return false;
return true;
}
inline bool print(int x,int y)
{
register int i;
for(i=;i<=cnt;i++)
{
int nx=x+pos[i][],ny=y+pos[i][];
if(!mapp[nx][ny]) return false;
if(nx>n||ny>m) return false;
mapp[nx][ny]=;
}
return true;
}
int main ()
{
register int i,j;
scanf("%d",&T);
while(T--)
{
i207M();
scanf("%d%d%d%d",&n,&m,&a,&b);
for(i=;i<=n;i++)
{
scanf("%s",rd+);
for(j=;j<=m;j++)
mapp[i][j]=(rd[j]=='x');
}
for(i=;i<=a;i++)
{
scanf("%s",rd+);
for(j=;j<=b;j++)
if(rd[j]=='x')
{
if(firx==-) firx=i,firy=j;
pos[++cnt][]=i-firx,pos[cnt][]=j-firy;
}
}
if(firx==-&&!judge()) {printf("NIE\n"); continue;}
bool f=true;
for(i=;i<=n&&f;i++)
for(j=;j<=m&&f;j++)
if(mapp[i][j]&&!print(i,j)) f=false;
(f&&judge())?printf("TAK\n"):printf("NIE\n");
}
return ;
}

最新文章

  1. WPF 变量绑定实现
  2. C# ArrayList的用法
  3. OCR图像识别技术-Asprise OCR
  4. web
  5. phpcms 二次开发数据过滤的技巧
  6. Android jni开发中的常见错误
  7. 查看oracle死锁进程并结束死锁
  8. Bootstrap简介
  9. consul模板配置参数值示例
  10. 二、中间件(middleware)
  11. Show Users Assigned to a Specific Role
  12. c#中执行多条sql语句【ORA-00911: 无效字符】
  13. C++中定义比较函数的三种方法
  14. 开发中/listfile.jsp(11,31) quote symbol expected 这个错误
  15. java 开源缓存框架--转载
  16. 发现一个可以在线运行JS代码的网站
  17. CSS跨浏览器(转)
  18. Struts 有哪些经常使用标签库
  19. Android(java)学习笔记224:横竖屏切换时Activity的生命周期
  20. AmazeUI 模态框封装

热门文章

  1. ESP8266 station模式下建立client、server TCP连接
  2. Ubuntu 16.04 主题美化及常用软件安装
  3. Atom 插件 Sync Settings 备份与恢复
  4. 选题博客:北航iCourse课程信息平台
  5. loadrunner socket协议问题归纳(4)---buffer接收变长和定长的数据
  6. Scrum立会报告+燃尽图(十月二十二日总第十三次)
  7. 【Alpha】阶段第四次Scrum Meeting
  8. 《C》变量
  9. c# byte转docx
  10. lintcode-450-K组翻转链表