问题描述
同在一个高中,他却不敢去找她,虽然在别人看来,那是再简单不过的事。暗恋,是他唯一能做的事。他只能在每天课间操的时候,望望她的位置,看看她倾心的动作,就够了。操场上的彩砖啊,你们的位置,就是他们能够站立的地方,他俩的关系就像砖与砖之间一样固定,无法动摇。还记得当初铺砖的工人,将整个操场按正方形铺砖(整个操场可视为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;
分析:枚举所有方块的最左上角的点,依次向右下角探测,得到能探测到的最大面积,取最大值即可~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <iostream> #include <algorithm> #include <cmath> using namespace std; int m[210][210], ans = 0, r, c; int check(int a, int b){ for(int k = 1;; k++){ for(int i = a; i <= a + k; i++) if(m[i][b+k] != m[a][b]) return k * k; for(int i = b; i <= b + k; i++) if(m[a+k][i] != m[a][b]) return k * k; } } int main() { fill(m[0],m[0]+210*210,-1); scanf("%d%d", &r, &c); for(int i = 1; i <= r ; i++) for(int j = 1; j <= c; j++) scanf("%d",&m[i][j]); for(int i = 1; i <= r ; i++) for(int j = 1; j <= c; j++) ans = max(ans,check(i,j)); cout << ans << endl; return 0; } |
❤ 点击这里 -> 订阅《PAT | 蓝桥 | LeetCode学习路径 & 刷题经验》by 柳婼