首页 > 其他分享 >GESP 202406 四级认证 T1 题解

GESP 202406 四级认证 T1 题解

时间:2024-07-01 14:59:03浏览次数:23  
标签:maxx int 题解 wh T1 bl 202406 矩形 check

大意:一个只包含 0 0 0 和 1 1 1 的矩形,边长为 n n n 和 m m m,求这个矩形中,最大的,其中 0 0 0 和 1 1 1 数量相等的矩形,如果有,输出最大矩形的面积,如果没有,则输出 0 0 0。

思路

先从此题数据范围部分入手,由于 n , m ≤ 10 n,m \le 10 n,m≤10,数据量很小,所以我们只需要暴力枚举各个矩形的四个端点,并判断其合法性,再存储最大值即可得到答案。

解决方案

以下是枚举端点的代码,注意: i i i 代表矩形左上端点, j j j 代表矩形左下端点, k k k 代表矩形右上端点, l l l 代表矩形右下端点,且 i ≤ k i \le k i≤k 和 j ≤ l j \le l j≤l。

for(int i=0;i<n;i++)
  for(int j=0;j<m;j++)
    for(int k=i;k<n;k++)
      for(int l=j;l<m;l++)
        //枚举四个端点进行操作

然后判断矩阵是否合法。

bool check(int x1,int x2,int y1,int y2){
  int wh=0;
  int bl=0;
  for(int i=x1;i<=x2;i++){
    for(int j=y1;j<=y2;j++){
      if(arr[i][j]=='0'){//由于是字符串输入,不能写 arr[i][j]==0
        wh++;
      }else{
        bl++;
      }
    }
  }
  if(bl==wh){
    return true;
  }else{
    return false;
  }
}

注意, c h e c k check check 函数的函数列表为先横后纵,在填写时要看仔细。
如果枚举的矩形符合要求,则用一个变量 m a x x maxx maxx 来存储当前最大的合法矩形的面积。

//这是在 for 循环枚举时进行的操作
if(check(i,k,j,l)){
  maxx=max(maxx,(k-i+1)*(l-j+1));
}

最后输出 m a x x maxx maxx 即可。

完整代码

#include<bits/stdc++.h>
using namespace std;
string arr[15];
int n,m,maxx=0;
bool check(int x1,int x2,int y1,int y2){
  int wh=0;
  int bl=0;
  for(int i=x1;i<=x2;i++){
    for(int j=y1;j<=y2;j++){
      if(arr[i][j]=='0'){
        wh++;
      }else{
        bl++;
      }
    }
  }
  if(bl==wh){
    return true; 
  }else{
    return false;
  }
}
int main(){
  cin>>n>>m;
  for(int i=0;i<n;i++){
  	cin>>arr[i];
  }
  for(int i=0;i<n;i++){
  	for(int j=0;j<m;j++){
	  for(int k=i;k<n;k++){
		for(int l=j;l<m;l++){
		  if(check(i,k,j,l)){
		  	maxx=max(maxx,(k-i+1)*(l-j+1));
		  }
		}
	  }
	}
  }
  cout<<maxx;
  return 0;
} 

标签:maxx,int,题解,wh,T1,bl,202406,矩形,check
From: https://blog.csdn.net/sugars_1216/article/details/140083182

相关文章

  • ## BZOJ2720 [Violet 5] 列队春游 题解
    Problem对于一个数列\(S\),\(S_0=\infty\),设对于\(S_i\),\(S_{a_i}\)是\(S_i\)之前第一个大于等于\(S_i\)的数。给定\(S\)中的元素,求\(\sum_{i=1}^{n}(i-a_i)\)的期望。Solution我们考虑对于每一种身高的学生,分别统计期望。显然,对于身高为\(h\)的学生,只有身高为\(......
  • ata1.00: exception Emask 0x0 SAct 0x8000000 SErr 0x0 action 0x6 frozen 问题解析
    ata1.00:exceptionEmask0x0SAct0x8000000SErr0x0action0x6frozen硬盘问题测试发现嵌入式linuxvfat文件系统的sata固态硬盘偶然启动时出现异常打印如下:ata1.00:exceptionEmask0x0SAct0x8000000SErr0x0action0x6frozenata1.00:failedcommand:READFPD......
  • 第24节 习题解析
    第24节习题解析24.1-数据类型、控制结构、函数1、数据类型与表达式1.类型修饰符不能修饰_____ A.charB.intC.longintD.float2.下列选项中,合法的整型常量的是_____A.60 B.01a C.986,012 D.2e53.字符串"\t\v\\\0which\n"的长度是_____A......
  • 通信原理练习题解析(详细版)
    文章目录说明选择填空简答分析计算说明部分内容,仅为个人观点,如有错误之处,欢迎交流!选择属于数字信号的是(A)​A:PCM信号B:PAM信号C:PDM信号D:PPM信号PCM信号(PulseCodeModulation,脉冲编码调制):P将模拟信号转换为数字信号的方法PDM信号(PulseDensityModula......
  • Public Round #13 题解
    旋转序列来源:IzbornePripreme2022(CroatianIOI/CEOITeamSelection)Day1,ProblemBhttps://qoj.ac/contest/956/problem/4326两个串之间\(1\)匹配的次数总和为\(k\timesl\),并且共有\(n\)次匹配。于是答案的上界为\(k\timesl\)个球放进\(n\)个盒子,最小化......
  • C++基础语法——《循环结构》题解
    循环结构参考资料:https://blog.csdn.net/m0_56945138/article/details/118929416需要掌握:1.for循环用法2.while循环用法3.continue跳过和break终止题号题目名称题解链接3067输出范围内的整数https://www.cnblogs.com/jyssh/p/182740551206简单的累加https://www......
  • [JLU] 数据结构与算法上机题解思路分享-第一次上机
    前言首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。这里只是思路解析的博客,代码仓库是JLU_Data_Structures_Record希望你能在这里找到你想要的:)正文A调皮的哈利分数30作者朱允刚单位吉林大学贝蒂是个打字高手,打字时有不看屏幕的习......
  • abc360_G Suitable Edit for LIS 题解
    题目链接:Atcoder或者洛谷来讲讲纯降智做法,不需要任何智商的做法,顺带整活:对于一个\(LIS\)可以拆成\(preLIS+sufLIS\),而我们现在至多可以修改一个点,那么如果\(preLIS\)的末尾元素为\(x\),\(sufLIS\)的末尾元素为\(y\),那么如果有\(y-x\ge2\),那么我们可以至少找到一个元......
  • HDLBits练习Shift18 Verilog逻辑右移和算数右移的区别
    算术右移时,移入的是移位寄存器中数字(本例中为q[63])的符号位,而不是逻辑右移时的零。右移n位,即加入n位符号位。即若符号位为1,在左边补1;若符号位为0,就补0。算术右移的另一种思路是,它假定被移位的数字是带符号的,并保留符号,因此算术右移是右移n位将带符号的数字除以2的n次幂。......
  • C语言 | Leetcode C语言题解之第188题买卖股票的最佳时机IV
    题目:题解:intmaxProfit(intk,int*prices,intpricesSize){intn=pricesSize;if(n==0){return0;}k=fmin(k,n/2);intbuy[k+1],sell[k+1];memset(buy,0,sizeof(buy));memset(sell,0,sizeof(sell));......