HYSBZ - 3750 Pieczęć(模拟)
2024-09-30 10:04:56
题目:
一张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 ;
}
最新文章
- java保留两位小数4种方法
- 使用zfs进行pg的pitr恢复测试
- JavaScript学习笔记——变量和数据类型
- PostgreSQL中字符串相关问题
- ExtJS MVC学习手记 2
- 使用ckplayer搭建rtmp视频直播应用
- 一个可视化的retrospective网站
- (原+转)ROC曲线
- eclipse出现错误:he type java.util.Map$Entry cannot be resolved. It is indirectly referenced
- 斜率优化dp 的简单入门
- 蓝桥杯——X星球居民问题
- JS事件(四)坐标位置
- 网络基础、ftp任务(进度条、计算文件大小、断点续传、搭建框架示例)
- 分享一个 jsPDF的简单使用以及中文编码问题的解决
- linux下热插拔事件的产生是怎样通知到用户空间,kobject_uevent_env之uevent【转】
- TypeScript的HTML5游戏
- Android动画知识汇总
- comet4j推送 405/500 JSON转换异常
- 【转】snmpwalk常用用法
- 20155316 2016-2017-2 《Java程序设计》第3周学习总结
热门文章
- maven中添加json-lib的jar包
- logback 使用详解 (转)
- wamp的手动安装
- [笔记]如何将已存在的JAVA添加到当前ECLIPSE JAVA工程中
- E20170520-ts
- bzoj 4820: [Sdoi2017]硬币游戏【kmp+高斯消元】
- JQuery-Validate明明配置好了但是不生效?卡了2个小时的bug解决了,原因很简单。
- DFS Gym 100553J Jokewithpermutation
- Service官方教程(4)两种Service的生命周期函数
- HTML5的音频播放和视频播放