4644: 【GESP2409四级】黑白方块
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:14
解决:5
题目描述
小杨有一个$n$ 行$m$ 列的网格图,其中每个格子要么是白色,要么是黑色。
小杨想知道网格图中是否存在一个满足如下条件的子矩形:
子矩形由$4$ 行$4$ 列组成;
子矩形的第$1$ 行 和第$4$ 行只包含白色格子;
对于子矩形的第$2$ 行 和第$3$ 行,只有第$1$ 个和第$4$ 个格子是白色的,其余格子都是黑色的;
请你编写程序帮助小杨判断。
小杨想知道网格图中是否存在一个满足如下条件的子矩形:
子矩形由$4$ 行$4$ 列组成;
子矩形的第$1$ 行 和第$4$ 行只包含白色格子;
对于子矩形的第$2$ 行 和第$3$ 行,只有第$1$ 个和第$4$ 个格子是白色的,其余格子都是黑色的;
请你编写程序帮助小杨判断。
输入
第一行包含一个正整数$t$ ,代表测试用例组数。
接下来是$t$ 组测试用例。对于每组测试用例,一共$n+1$ 行。
第一行包含两个正整数 $n,m$,含义如题面所示。
之后$n$ 行,每行一个长度为$m$ 的$01$ 串,代表网格图第$i$ 行格子的颜色,如果为$0$ ,则对应格子为白色,否则为黑色。
接下来是$t$ 组测试用例。对于每组测试用例,一共$n+1$ 行。
第一行包含两个正整数 $n,m$,含义如题面所示。
之后$n$ 行,每行一个长度为$m$ 的$01$ 串,代表网格图第$i$ 行格子的颜色,如果为$0$ ,则对应格子为白色,否则为黑色。
输出
对于每组测试用例,如果存在,输出
Yes,否则输出 No。
样例输入 复制
3
1 4
0110
5 5
00000
01100
01100
00001
01100
5 5
00000
01100
01110
00001
01100
样例输出 复制
No
Yes
No
提示
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int w[N][N];
int n,m;
int match[4][4];
bool check(int xa,int ya){
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(w[xa+i][ya+j]!=match[i][j]){
return false;
}
}
}
return true;
}
int main(){
int t;
cin>>t;
for(int i=1;i<3;i++)match[1][i]=match[2][i]=1;
while(t--){
cin>>n>>m;
for(int i=1;i<=n;i++){
string s;
cin>>s;
for(int j=1;j<=m;j++){
w[i][j]=s[j-1]-'0';
}
}
int fl = 0;
for(int i=1;i<=n-3;i++){
for(int j=1;j<=m-3;j++){
if(check(i,j)){
fl=1;
}
}
}
if(fl)cout<<"Yes\n";
else cout<<"No\n";
}
}