CodeForces 22B Bargaining Table (简单题)

本文介绍了一个关于寻找给定字符矩阵中只由'0'组成的子矩阵,并求解这些子矩阵周长最大值的问题。通过直接暴力枚举的方法来解决此问题,给出了详细的算法思路及参考代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目类型  简单题

题目意思
给出一个 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;
}


### Codeforces Round 1028 (Div. 2) 目概述 Codeforces Round 1028 (Div. 2) 是一场包含多个算法问的比赛,涵盖了从简单到复杂的不同难度级别。以下是该比赛的部分目内容及简要说明: #### A. Gellyfish and Flower 在本中,有两个角色:Gellyfish 和 Flower。每个角色有两滴血量,分别用 \(a\) 和 \(c\) 表示 Gellyfish 的血量,用 \(b\) 和 \(d\) 表示 Flower 的血量[^3]。 获胜条件是攻击对方的最低血量,并比较双方的最低血量值。如果 Gellyfish 的最低血量小于 Flower 的最低血量,则 Gellyfish 获胜;否则,Flower 获胜。 #### B. Problem - B - Codeforces B 的具体内容未完全提供,但通常涉及数组、字符串或其他数据结构的操作。可以参考比赛页面获取完整描述。 #### C. Rectangles C 要求处理矩形的相关问。具体来说,给定一些矩形的边长信息,需要判断某些条件是否满足。时间限制为每组测试用例 2 秒,内存限制为 256 MB[^2]。输入和输出均为标准格式,详细规则可参考比赛页面。 ### 示例代码(A ) 以下是一个实现 A 逻辑的 C++ 程序: ```cpp #include <iostream> #include <algorithm> using namespace std; int main() { int t; cin >> t; while (t--) { int a, b, c, d; cin >> a >> b >> c >> d; int mina = min(a, c); int minb = min(b, d); if (mina < minb) cout << "Flower" << endl; else cout << "Gellyfish" << endl; } } ``` 此代码通过多次循环读取输入并计算两个角色的最低血量,最终输出获胜者名称。 ### 注意事项 - 比赛中的所有目均可以通过官方链接访问,例如 [Codeforces Round 1028 (Div. 2)](http://codeforces.com/contest/1028)[^2]。 - 每道目的详细规则和样例输入输出可在对应页面找到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值