现在的位置: 首页 > 综合 > 正文

CodeForces 22B Bargaining Table (简单题)

2018年01月13日 ⁄ 综合 ⁄ 共 757字 ⁄ 字号 评论关闭

题目类型  简单题


题目意思
给出一个 n*m 的只包含 '0' 或 '1'的字符矩阵 (1 <= n, m <= 25), 问只由 '0' 组成的矩阵中周长最长是多少

解题方法
直接暴力枚举最终矩阵的左上角 然后枚举矩阵的长和宽, 枚举长宽后再判断相应的矩形是否仅由 '0'组成, 如果是就更新结果
参考代码 - 有疑问的地方在下方留言 看到会尽快回复的
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>

using namespace std;

typedef long long LL;

const int MAXN = 1e2 + 10;
const LL INF = 1LL<<62;

char str[MAXN][MAXN];

int main() {
  int n, m;
  while(scanf("%d%d", &n, &m) != EOF) {
    for( int i=0; i<n; i++ ) scanf("%s", str[i]);
    int res = 0;
    for( int i=0; i<n; i++ ) {
      for( int j=0; j<m; j++ ) {
        if(str[i][j] == '1') continue;
        for( int k=1; k<=n-i; k++ ) {
          for( int h=1; h<=m-j; h++ ) {
            if((k + h)*2 <= res) continue;
            bool flag = true;
            for( int ti=0; ti<k && flag; ti++ ) {
              for( int tj=0; tj<h; tj++ ) {
                if(str[i+ti][j+tj] == '1') {
                  flag = false;
                  break;
                }
              }
            }
            if(flag) {
              res = max(res, (k + h)*2);
            }
          }
        }
      }
    }
    printf("%d\n", res);
  }
  return 0;
}

抱歉!评论已关闭.