[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 ...
随机推荐
- 触发器Demo
--mysql 触发器简单实例 --创建表1 )) ; --创建表2 )); --创建触发器,表一增加数据时,表二自动增加数据 create trigger t_afterinsert_on_tab1 ...
- Linux SSH Backdoor分析排查
1.SSH后门分类 SSH后门方式有以下几种 软链接 SSH Server wrapper SSH Keylogger 2.软链接 利用方法 [root@helen]# ln -sf /usr/sbi ...
- WebApi Owin SelfHost OAuth2 - client_credentials
参考:http://neverc.cnblogs.com/p/4970996.html
- BatchNorm caffe源码
1.计算的均值和方差是channel的 2.test/predict 或者use_global_stats的时候,直接使用moving average use_global_stats 表示是否使用全 ...
- Codefroces 628B New Skateboard(数位+思维)
题目链接:http://codeforces.com/contest/628/problem/B 题目大意:给你一段数字串s(1?≤?|s|?≤?3·10^5),求该字符串有多少子串是4的倍数.解题思 ...
- 关于文件格式Fuzzing测试与漏洞挖掘的学习
最近对于文件的漏洞挖掘比较感兴趣,所以在找资料来看.顺带记录笔记,把这些笔记贴在博客中分享一下.最近打算把精力放在mp3格式的漏洞发掘上,一来这是常见的文件格式格式也比较清晰.二来这也是学长推荐的入手 ...
- CCF CSP 201409-2 画图
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-2 画图 问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y ...
- MySQL 相关知识细节及解析
1,删除表中所有记录使用delete from 表名:还是用truncate table 表名 删除方式:delete 一条一条删除,不清空auto_increment记录数 truncate 直接将 ...
- Django实战(7):改造ProductList界面
有了上一节关于Django模板的基础,改造界面就很容易理解了.将界面设计师设计的页面中的内容根据复用程度分别放到基础模板base.html和专用模板productlist.html中. depot/t ...
- Ionic实战三:Ionic 图片预览可放大缩小左右滑动demo-iClub图片预览
这个demo的主要功能有两个,一个是首页的导航向上拉动会浮动在最上面的效果,另一个就是我们平时非常实用的功能,就是图片预览功能 点击可以放大图片,并且可以左右滑动,还可以双击放大缩小图片以及双手指控制 ...