[POI2015]Pieczęć
[POI2015]Pieczęć
题目大意:
一张\(n\times m(n,m\le1000)\)的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色。
你有一个\(a\times b(a,b\le1000)\)的印章,有些格子是凸起(会沾上墨水)的。你需要判断能否用这个印章印出纸上的图案。印的过程中需要满足以下要求:
- 印章不可以旋转。
- 不能把墨水印到纸外面。
- 纸上的同一个格子不可以印多次。
思路:
用一个vector来从上到下、从左到右存印章上的凸起。
从上到下、从左到右枚举纸上的黑点,将这个黑点对应印章上的第一个点,可以知道印章还会印到纸上的哪些点。若不合要求则说明无解,否则每个点至多被印一次,时间复杂度\(\mathcal O(nm)\)。
源代码:
#include<cstdio>
#include<cctype>
#include<vector>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
inline bool check(const char &ch) {
return ch=='.'||ch=='x';
}
inline bool getval() {
register char ch;
while(!check(ch=getchar()));
return ch=='x';
}
const int N=1000;
int n,m,r,c;
bool a[N][N];
std::vector<std::pair<int,int> > b;
inline bool check(const int &x,const int &y) {
return x>=0&&x<n&&y>=0&&y<m;
}
int main() {
for(register int T=getint();T;T--) {
n=getint(),m=getint(),r=getint(),c=getint();
for(register int i=0;i<n;i++) {
for(register int j=0;j<m;j++) a[i][j]=getval();
}
b.clear();
for(register int i=0;i<r;i++) {
for(register int j=0;j<c;j++) {
if(getval()) b.push_back(std::make_pair(i,j));
}
}
int x=b[0].first,y=b[0].second;
for(register int i=0;i<n;i++) {
for(register int j=0;j<m;j++) {
if(!a[i][j]) continue;
for(register unsigned p=0;p<b.size();p++) {
const int k=b[p].first,l=b[p].second;
if(!check(i-x+k,j-y+l)||!a[i-x+k][j-y+l]) {
puts("NIE");
goto Next;
} else {
a[i-x+k][j-y+l]=false;
}
}
}
}
puts("TAK");
Next:;
}
return 0;
}
[POI2015]Pieczęć的更多相关文章
- BZOJ3750 : [POI2015]Pieczęć
枚举第一个位置,然后暴力检验. #include<cstdio> #define N 1010 int T,n,m,a,b,x,y,i,j,k,q[N*N][2],cnt;char s[N ...
- BZOJ3750[POI2015]Pieczęć——链表
题目描述 一张n*m的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色. 你有一个a*b的印章,有些格子是凸起(会沾上墨水)的.你需要判断能否用这个印章印出纸上的图案.印的过程中需要满足以下要求: ...
- BZOJ 3750: [POI2015]Pieczęć 【模拟】
Description 一张n*m的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色. 你有一个a*b的印章,有些格子是凸起(会沾上墨水)的.你需要判断能否用这个印章印出纸上的图案.印的过程中需要 ...
- @bzoj - 3750@ [POI2015] Pieczęć
目录 @description@ @solution@ @accepted code@ @details@ @description@ 一张 n*m 的方格纸,有些格子需要印成黑色,剩下的格子需要保留 ...
- [Poi2015]
[POI2015]Łasuchy 一看以为是sb题 简单来说就是每个人获得热量要尽量多 不能找别人 首先这道题好像我自己找不到NIE的情况 很容易想到一个优化 如果一个数/2>另一个数 那么一定 ...
- POI2015题解
POI2015题解 吐槽一下为什么POI2015开始就成了破烂波兰文题目名了啊... 咕了一道3748没写打表题没什么意思,还剩\(BZOJ\)上的\(14\)道题. [BZOJ3746][POI20 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 4385: [POI2015]Wilcze doły
4385: [POI2015]Wilcze doły Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 648 Solved: 263[Submit][ ...
- BZOJ 4384: [POI2015]Trzy wieże
4384: [POI2015]Trzy wieże Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 217 Solved: 61[Submit][St ...
随机推荐
- Linux input子系统学习总结(一)---- 三个重要的结构体
一 . 总体架构 图 上层是图形界面和应用程序,通过监听设备节点,获取用户相应的输入事件,根据输入事件来做出相应的反应:eventX (X从0开始)表示 按键事件,mice 表示鼠标事件 Input ...
- Serv-U 的升级及数据备份和迁移【转】
Serv-U 配置备份 在serv-u7.x及以上版本安装目录下,有一个文件Serv-U.Archive是serv-u的配置文件,有一个users文件夹是Serv-U的域和用户的信息,那么我们只需 ...
- ASP.NET 实现Base64文件流下载PDF
因为业务需要调用接口获取的是 Base64文件流 需要提供给客户下载PDF文档 源码部分借鉴网上,具体地址忘记了. //Base64文件流 byte[] buffer = Convert.FromBa ...
- sicily 1459. The Dragon of Loowater
Time Limit: 1sec Memory Limit:32MB Description Once upon a time, in the Kingdom of Loowa ...
- MinGw 和 cygwin 的区别和联系
原创 by zoe.zhang .......................................................... 1. windows与Linux操作系统的不同 ...
- SSD固态硬盘检测工具AS SSD参数
一. 使用AS SSD Benchmark进行查看 包括了4个方面的测试(顺序读写.4K随机读写.64线程4K读写.寻道时间) AS SSD的主要测试,也是网上最常见得到测试成绩的,是它主界面上持续. ...
- eclipse各种报错
1.控制台报这个错是由于tomcat的session缓存的问题; org.apache.catalina.session.StandardManager doLoad 造成原因:上次未正确关闭tomc ...
- MySQL基础 - Navicat及HeidiSQL可视化数据库管理工具
你还在使用终端界面查看数据库吗?是的,用来用去还是觉得命令行好用.....这里先留个位子,改天再介绍下这俩工具的使用,虽然好像觉得没啥需要介绍的.
- javascript数组元素的添加、删除与插入以及参数数组的使用
1.数组元素的添加 push方法在数组的尾部添加元素: var colorArray=new Array(); colorArray.push('red','black','yellow'); //这 ...
- Oracle常用sql语句。
最近工作中遇到了一些与oracle相关的问题,稍微整理一些工作中用到的SQL语句 时间相关 --查询距当前时间十分钟内的数据 select sysdate -interval '10' minute ...