@description@

一张 n*m 的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色。

你有一个 a*b 的印章,有些格子是凸起(会沾上墨水)的。你需要判断能否用这个印章印出纸上的图案。印的过程中需要满足以下要求:

(1)印章不可以旋转。

(2)不能把墨水印到纸外面。

(3)纸上的同一个格子不可以印多次。

input

第一行一个整数 q (1<=q<=10),表示测试点数量。

接下来 q 个测试点,每个测试点中:

第一行包含 4 个整数 n, m, a, b (1<=n,m,a,b<=1000)。

接下来 n 行,每行 m 个字符,描述纸上的图案。'.'表示留白,'x'表示需要染黑。

接下来 a 行,每行 b 个字符,描述印章。'.'表示不沾墨水,'x'表示沾墨水。

output

对于每个测试点,输出 TAK(是)或 NIE(否)。

sample input

2

3 4 4 2

xx..

.xx.

xx..

x.

.x

x.

..

2 2 2 2

xx

xx

.x

x.

sample output

TAK

NIE

@solution@

说实话我一开始看到这道题觉得挺难的

纸上的从上到下,从左到右的第一个黑格一定对应着印章上从上到下,从左到右的第一个黑格。

否则你移动印章要么多盖黑格要么少盖黑格

然后就模拟,再找下一个黑格,再模拟。

为了控制时间复杂度,我们将印章上的黑格坐标存下来而不是将整个印章存下来。

这样每次操作必然会消去一个黑格。

@accepted code@

#include<vector>
#include<cstdio>
#include<iostream>
using namespace std;
typedef pair<int, int> pii;
const int MAXN = 1000 + 5;
int read() {
static int x; scanf("%d", &x);
return x;
}
vector<pii>vec;
char pp[MAXN][MAXN], s[MAXN];
void solve() {
vec.clear();
int n = read(), m = read(), a = read(), b = read();
for(int i=1;i<=n;i++)
scanf("%s", pp[i] + 1);
int ox = -1, oy = -1;
for(int i=1;i<=a;i++) {
scanf("%s", s + 1);
for(int j=1;j<=b;j++)
if( s[j] == 'x' ) {
if( ox == -1 )
ox = i, oy = j;
vec.push_back(make_pair(i - ox, j - oy));
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if( pp[i][j] == 'x' ) {
for(int k=0;k<vec.size();k++) {
int x = i + vec[k].first;
int y = j + vec[k].second;
if( x < 1 || y < 1 || x > n || y > m ) {
puts("NIE");
return ;
}
if( pp[x][y] == 'x' )
pp[x][y] = '.';
else {
puts("NIE");
return ;
}
}
}
puts("TAK");
}
int main() {
int q = read();
for(int i=1;i<=q;i++)
solve();
}

@details@

我一开始还想着什么图染色。

现在看过来都为当时的自己担忧……

@bzoj - 3750@ [POI2015] Pieczęć的更多相关文章

  1. BZOJ 3750: [POI2015]Pieczęć 【模拟】

    Description 一张n*m的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色. 你有一个a*b的印章,有些格子是凸起(会沾上墨水)的.你需要判断能否用这个印章印出纸上的图案.印的过程中需要 ...

  2. [POI2015]Pieczęć

    [POI2015]Pieczęć 题目大意: 一张\(n\times m(n,m\le1000)\)的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色. 你有一个\(a\times b(a,b\l ...

  3. bzoj 4386: [POI2015]Wycieczki

    bzoj 4386: [POI2015]Wycieczki 这题什么素质,爆long long就算了,连int128都爆……最后还是用long double卡过的……而且可能是我本身自带大常数吧,T了 ...

  4. BZOJ 4385: [POI2015]Wilcze doły

    4385: [POI2015]Wilcze doły Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 648  Solved: 263[Submit][ ...

  5. BZOJ 4384: [POI2015]Trzy wieże

    4384: [POI2015]Trzy wieże Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 217  Solved: 61[Submit][St ...

  6. Bzoj 3747: [POI2015]Kinoman 线段树

    3747: [POI2015]Kinoman Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 553  Solved: 222[Submit][Stat ...

  7. BZOJ 3747 POI2015 Kinoman 段树

    标题效果:有m点,每个点都有一个权值.现在我们有这个m为点的长度n该序列,寻求区间,它仅出现一次在正确的点区间内值和最大 想了很久,甚至神标题,奔说是水的问题--我醉了 枚举左点 对于每个请求留点右键 ...

  8. BZOJ 4380 [POI2015]Myjnie | DP

    链接 BZOJ 4380 题面 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]. 有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个 ...

  9. 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 ...

随机推荐

  1. ajax实例解析

    function showHint(str) { var xmlhttp; if (str.length==0) { document.getElementById("txtHint&quo ...

  2. tomcat9 gzip

    我认为apr模式比较屌所以 <Connector port=" protocol="org.apache.coyote.http11.Http11AprProtocol&qu ...

  3. javax.el.PropertyNotFoundException: Property 'studentAge' not found on type com.hs.model.StudentModel

    mi明明已经把这个字段重构了,为啥还这样提示呢?整个工程全部 查找也找不到这个字段了啊

  4. Flask中的session机制

    cookie和sessioncookie:网站中,http请求是无状态的,第一次和服务器连接后并且登陆成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是解决了改问题,第一次 ...

  5. Angungular.js 的过滤器&工具方法

    字母大小写 数字 货币 截取字符串 截取数组 用JS操作 ----------------------------------------------------------------------- ...

  6. 依赖注入的方式(DI)

    方式: 接口注入: setter方法注入: 构造方法注入: 接口注入: public class ClassA { private InterfaceB clzB; public void doSom ...

  7. Centos系统Python环境搭建和项目部署

    目录 一.Python 1. 源安装 Python3 2. SCL安装 Python3 3. 虚拟环境venv 4. 安装Flask 5. 安装gunicorn 二.安装Nginx 1. 安装Ngin ...

  8. LUOGU P2587 [ZJOI2008]泡泡堂

    传送门 解题思路 刚开始先写了个田忌赛马的贪心,就是要是打不过就拿最弱的送死,30分...后来瞄了眼题解,发现这样是错的,比如说这样的数据 : 3 3 2 3 1 如果用田忌赛马的话,让2-3 3-1 ...

  9. wamp httpd-vhosts.conf

    配置Apache的httpd.conf文件 Include conf/extra/httpd-vhosts.conf 修改apache的vhost文件 <VirtualHost *:> D ...

  10. [MySQL] TRUNCATE数据库所有表,打印所有TRUNCATE表语句

    将XXX替换成数据库名称,然后执行SQL,将执行结果拷贝出来执行就可以TRUNCATE数据库所有表了. select CONCAT('truncate table XXX.',TABLE_NAME,' ...