2019牛客国庆集训派对 全 1 子矩阵 解题报告

全 1 子矩阵

https://ac.nowcoder.com/acm/contest/1099/A

链接

试题链接
解题报告备份链接

解题思路

把左上角和右下角的1找到,中间必须全部填满1,否则就不是bobo矩阵。

       +-------------------+
       |       开始        |
       +---------+---------+
                 |
                 |
                 v
       +-------------------+
       | 找到最左上角的1    |
       +-------------------+
                 |
                 |
                 v
       +-------------------+
       |  找到最右下角的1   |
       +-------------------+
                 |
                 |
                 v
               XXXXX
           XX X    XXXX
       XXXX            XXX
     XX                   XXXX      否
 XXXX                        XXXX
XX        中间是不是全是1         +----------------------+
  XXX                          X X                      |
     XXXXX                  X X                         |
          XXXX         XXXX                             |
             XXXX   XXXX                                |
                XXXXX                                   |
                 +                                      |
                 |   是                                 |
                 |                                      |
                 |                                      |
                 |                                      |
                 v                                      v
      +----------------------+             +-----------------------+
      |                      |             |                       |
      |     输出"Yes"        |             |   输出"No"             |
      |                      |             |                       |
      +----------------------+             +-----------------------+
                 |                                   |
                 |                                   |
                 |                                   |
                 |                                   |
                 |                                   |
                 |                                   |
                 |<----------------------------------+
                 |
                 |
                 |
                 v
        +----------------------+
        |        结束          |
        +----------------------+

源代码

#include <cstdio>
#include <cstring>
#include <climits>
#include <utility>

using namespace std;

#define MAX_LENGTH 15

typedef pair<int, int> COOR;

bool is_bobo_mat(int n, int m, char A[MAX_LENGTH][MAX_LENGTH])
{
    COOR upper_leftest_one = make_pair(INT_MAX, INT_MAX);
    COOR lower_rightest_one = make_pair(INT_MIN, INT_MIN);
    bool found_one = false;
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < m; ++j)
        {
            if (A[i][j] == '1')
            {
                found_one = true;
                if (i < upper_leftest_one.first)
                    upper_leftest_one.first = i;
                if (j < upper_leftest_one.second)
                    upper_leftest_one.second = j;
                if (i > lower_rightest_one.first)
                    lower_rightest_one.first = i;
                if (j > lower_rightest_one.second)
                    lower_rightest_one.second = j;
            }
        }
    }
    if (!found_one)
        return false;

    for (int i = upper_leftest_one.first; i <= lower_rightest_one.first; ++i)
    {
        for (int j = upper_leftest_one.second; j <= lower_rightest_one.second; ++j)
        {
            if (A[i][j] == '0')
                return false;
        }
    }
    return true;
}

int main()
{
    int n, m;
    char A[MAX_LENGTH][MAX_LENGTH];
    while (scanf("%d%d", &n, &m) != EOF)
    {
        memset(A, 0, sizeof(A));
        for (int j = 0; j < n; ++j)
            scanf("%s", A[j]);
        if (is_bobo_mat(n, m, A))
            puts("Yes");
        else
            puts("No");
    }
    return 0;
}
全部评论

相关推荐

3 收藏 评论
分享
牛客网
牛客企业服务