【蓝桥杯】ALGO-112 暗恋
题目描述:
同在一个高中,他却不敢去找她,虽然在别人看 来,那是再简单不过的事。暗恋,是他唯一能做的事。他只能在每天课间操的时候,望望她的位置,看看她倾心的动作,就够了。操场上的彩砖啊,你们的位置,就是他们能够站立的地方,他俩的关系就像砖与砖之间一样固定,无法动摇。还记得当初铺砖的工人,将整个操场按正方形铺砖(整个操场可视为R行C列的矩阵,矩阵的每个元素为一块正方形砖块),正方形砖块有两种,一种为蓝色,另一种为红色。我们定义他和她之间的“爱情指标”为最大纯色正方形的面积,请你写一个程 序求出“爱情指标”。
输入描述:
第一行两个正整数R和C(0<=R,C<=200)。 接下来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
解题思路:
暴力破解,从输入矩阵左上⻆的点开始枚举,依次向右下角探测最大正方形的⾯积,不断更新最大值ans,最后进行输出即可。
AC代码:
#include <bits/stdc++.h>
using namespace std;
#define Up(i,a,b) for(int i = a; i <= b; i++)
#define ms(a,x) memset(a,x,sizeof(a))
const int maxn = 201;
const int INF = 0x3f3f3f3f;
int a[maxn][maxn];
int check(int x,int y) //寻找从(x,y)开始向右下角探测的最大正方形的面积
{
Up(i,1,maxn)
{
Up(j,x,x+i)
{
if(a[j][y+i] != a[x][y]) return i*i;
}
Up(j,y,y+i)
{
if(a[x+i][j] != a[x][y]) return i*i;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
ms(a,INF);
int r,c; //rhangc列
cin >> r >> c;
Up(i,1,r)
{
Up(j,1,c)
{
cin >> a[i][j];
}
}
int ans = 0;
Up(i,1,r)
{
Up(j,1,c)
{
ans = max(ans,check(i,j));
}
}
cout << ans << endl;
return 0;
}
原文链接:【蓝桥杯】ALGO-112 暗恋
麦芽雪冷萃 版权所有,转载请注明出处。
还没有任何评论,你来说两句吧!