蓝桥杯 ALGO-112 暗恋 | 刷题打卡

230 阅读2分钟

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位

一、题目描述:

问题描述

同在一个高中,他却不敢去找她,虽然在别人看来,那是再简单不过的事。暗恋,是他唯一能做的事。他只能在每天课间操的时候,望望她的位置,看看她倾心的动作,就够了。操场上的彩砖啊,你们的位置,就是他们能够站立的地方,他俩的关系就像砖与砖之间一样固定,无法动摇。还记得当初铺砖的工人,将整个操场按正方形铺砖(整个操场可视为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;
}

四、总结

目前还有大量算法知识需要学习,在算法的道路上我还有很长的路要走
争取再接再厉,明天再刷两题
希望一年后我也能拿蓝桥杯国一😉
加油吧,少年!!!