本文正在参与掘金团队号上线活动,点击 查看大厂春招职位
一、题目描述:
问题描述
同在一个高中,他却不敢去找她,虽然在别人看来,那是再简单不过的事。暗恋,是他唯一能做的事。他只能在每天课间操的时候,望望她的位置,看看她倾心的动作,就够了。操场上的彩砖啊,你们的位置,就是他们能够站立的地方,他俩的关系就像砖与砖之间一样固定,无法动摇。还记得当初铺砖的工人,将整个操场按正方形铺砖(整个操场可视为R行C列的矩阵,矩阵的每个元素为一块正方形砖块),正方形砖块有两种,一种为蓝色,另一种为红色。我们定义他和她之间的“爱情指标”为最大纯色正方形的面积,请你写一个程序求出“爱情指标”。
输入格式
第一行两个正整数R和C。
接下来R行C列描述整个操场,红色砖块用1来表示,蓝色砖块用0来表示。
输出格式
一个数,表示他和她之间的“爱情指标”。
样例输入
5 8
0 0 0 1 1 1 0 1
1 1 0 1 1 1 1 1
0 1 1 1 1 1 0 1
1 0 1 1 1 1 1 0
1 1 1 0 1 1 0 1
样例输出
9
数据规模和约定
- 40%的数据R,C<=10;
- 70%的数据R,C<=50;
- 100%的数据R,C<=200;
二、思路分析
这道题应该能用搜索来写,但我还不会搜索,所以只好用枚举了
枚举所有左上顶点,依次向右下探测最大面积
写这个题中间还有个插曲,judge函数第一个if语句本来没加,结果只有70分,网上看别人代码后发现了这个问题,加上后就100分了,我想应该是存在数组溢出的边界情况
对了,等我会了搜索,用搜索再写一遍哈😂
三、AC代码
#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
int Matrix [200][200];
int R,C;
bool judge(int x,int y,int l)
{
int color = Matrix[x][y];
if(x+l>R||y+l>C) return false;
for(int i=x;i<x+l;i++)//判断以(x,y)为左上顶点,以l为边长的纯色方形能否存在
for(int j=y;j<y+l;j++)
if(color!=Matrix[i][j])
return false;
return true;
}
int main()
{
int i,j,maxWidth,maxLength=1;
cin>>R>>C;
for(i=0;i<R;i++)
for(j=0;j<C;j++)
cin>>Matrix[i][j];
for(i=0;i<R;i++)
{
for(j=0;j<C;j++)
{
while(judge(i,j,maxLength))
{
maxWidth=maxLength;
maxLength++;
}
}
}
cout<<maxWidth*maxWidth;
return 0;
}
四、总结
目前还有大量算法知识需要学习,在算法的道路上我还有很长的路要走
争取再接再厉,明天再刷两题
希望一年后我也能拿蓝桥杯国一😉
加油吧,少年!!!