【蓝桥杯】ALGO-112 暗恋
- 2019 年 11 月 13 日
- 筆記
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42449444/article/details/102994124
题目描述:
同在一个高中,他却不敢去找她,虽然在别人看 来,那是再简单不过的事。暗恋,是他唯一能做的事。他只能在每天课间操的时候,望望她的位置,看看她倾心的动作,就够了。操场上的彩砖啊,你们的位置,就是他们能够站立的地方,他俩的关系就像砖与砖之间一样固定,无法动摇。还记得当初铺砖的工人,将整个操场按正方形铺砖(整个操场可视为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; }