1. 程式人生 > >【NOIP2016提高A組模擬9.7】鼎紋

【NOIP2016提高A組模擬9.7】鼎紋

本題暴力判斷即可。記得要判邊界,而且check的時候銅模的那個位置一定要是1!!!
(┭┮﹏┭┮)(我™就是這個地方gg了,爆蛋啊~ )

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int T,n,m,a,b,d[1010][1010],t[1010][1010];
int x1,y1;

inline int read()
{
	int x=0; char c=getchar();
	while (c<'0' || c>'9') c=getchar
(); while (c>='0' && c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x; } bool check(int x,int y) { for (int i=1;i<=a;i++) for (int j=1;j<=b;j++) { if ((x+i<=0 || y+j<=0 || x+i>n || y+j>m || !d[x+i][y+j]) && t[i][j]) return 0; if (t[i]
[j]) d[x+i][y+j]=0; } return 1; } int main() { T=read(); scanf("%d\n",&T); while (T--) { n=read(),m=read(),a=read(),b=read(); scanf("\n");x1=y1=0; for (int i=1;i<=n;i++,scanf("\n")) for (int j=1;j<=m;j++) d[i][j]=(getchar()^48); for (int i=1;i<=a;i++,scanf("\n")) for
(int j=1;j<=b;j++) { t[i][j]=(getchar()^48); if (t[i][j]==1 && !x1) x1=i,y1=j; } for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) if (d[i][j] && !check(i-x1,j-y1)) goto gg; puts("YES"); continue; gg:puts("NO"); } return 0; }