📋 个人简介
🔥问题描述
🔥输⼊格式
🔥输出格式
🔥样例输入
2
3 4 4 2
1100
0110
1100
10
01
10
00
2 2 2 2
11
11
01
10
🔥样例输出
YES
NO
🔥数据规模与约定
🍋对于 70% 的数据,n,m,a,b≤50。
🍋对于 100% 的数据,1≤T≤10,1≤n,m,a,b≤1000。
💯CODE
#include<bits/stdc++.h>
using namespace std;
struct kk{
int x,y;
}k[100010];
char tar[1010][1010];
int n,m,a,b,t,s,tx,ty,sx,sy;
char g;
int main(){
cin >> t;
while(t--){
int flg=1,cnt=0,ff=1;
cin >> n >> m >> a >> b;
for(int i = 0;i < n;i++)
for(int j = 0;j < m;j++)
tar[i][j ]= 0;
for(int i = 1;i <= a;i++)
for(int j = 1;j <= b;j++)
tar[i][j] = 0;
for(int i = 0;i < n;i++)
cin >> tar[i];;
for(int i = 1;i <= a;i++)
for(int j = 1;j <= b;j++){
scanf(" %1d",&s);
if(s){
if(ff == 1){
k[++cnt].x = 0;
k[cnt].y = 0;
sx = i;
sy = j;
ff = 0;
}
else{
k[++cnt].x = i-sx;
k[cnt].y = j-sy;
}
}
}
for(int i = 0;i < n;i++){
if(flg == 0)break;
for(int j = 0;j < m;j++){
if(flg == 0)break;
if(tar[i][j] == '1'){
if(ff == 1){
flg = 0;
break;
}
for(int p = 1;p <= cnt;p++){
tx = i + k[p].x,ty = j + k[p].y;
char e = tar[tx][ty];
if(tx >= 0 && ty >= 0 && tx < n && ty < m && (e == '1')){
tar[tx][ty] = '0';
}
else{
flg = 0;
break;
}
}
}
}
}
if(flg)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}