4644: 【GESP2409四级】黑白方块
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:1
解决:1
题目描述
小杨有一个$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"; } }