2019湖南省赛 全 1 子矩阵

全 1 子矩阵
Bobo 写了一个 n n m m 列的矩阵 A i , j A_{i, j} .

首先,他把所有元素 A i , j A_{i, j} ( 1 i n , 1 j m 1 \leq i \leq n, 1 \leq j \leq m ) 设为 0.
然后,他选了 4 4 个整数 x 1 , x 2 , y 1 , y 2 x_1, x_2, y_1, y_2 满足 1 x 1 x 2 n , 1 y 1 y 2 m 1 \leq x_1 \leq x_2 \leq n, 1 \leq y_1 \leq y_2 \leq m ,并把满足 x 1 i x 2 , y 1 j y 2 x_1 \leq i \leq x_2, y_1 \leq j \leq y_2 的元素 A i , j A_{i, j} 设为 1.
给出 n n m m 列的矩阵 A i , j A_{i, j} , 判断它是否是 Bobo 所写的矩阵。

输入格式
输入文件包含多组数据,请处理到文件结束。

每组数据的第一行包含两个整数 n n m m .

接下来 n n 行,其中第 i i 行包含 m m 个整数 A i , 1 , A i , 2 , , A i , m A_{i, 1}, A_{i, 2}, \dots, A_{i, m} .

1 n , m 10 1 \leq n, m \leq 10
A i , j 0 , 1 A_{i, j} \in {0, 1}
至多 1000 1000 组数据。
输出格式
对于每组数据,如果所给矩阵是 Bobo 所写的矩阵,输出 Yes, 否则输出 No.

思路:
签到不解释

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

int a[20][20];
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        int flag = 1;
        int x1 = n,y1 = m,x2 = 0,y2 = 0;
        for(int i = 1;i <= n;i++)
        {
            for(int j = 1;j <= m;j++)
            {
                scanf("%1d",&a[i][j]);
                if(a[i][j] == 1)
                {
                    flag = 0;
                    x1 = min(x1,i);x2 = max(x2,i);
                    y1 = min(y1,j);y2 =max(y2,j);
                }
            }
        }
        
        for(int i = x1;i <= x2;i++)
        {
            for(int j = y1;j <= y2;j++)
            {
                if(a[i][j] != 1)
                {
                    flag = 1;
                    break;
                }
            }
            if(flag)break;
        }
        if(flag)printf("No\n");
        else printf("Yes\n");
    }
    return 0;
}

发布了756 篇原创文章 · 获赞 27 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/tomjobs/article/details/104642220
今日推荐