64 暗恋
作者: Turbo时间限制: 1S章节: 基本练习(数组)
问题描述 :
同在一个高中,他却不敢去找她,虽然在别人看来,那是再简单不过的事。暗恋,是他唯一能做的事。他只能在每天课间操的时候,望望她的位置,看看她倾心的动作,就够了。操场上的彩砖啊,你们的位置,就是他们能够站立的地方,他俩的关系就像砖与砖之间一样固定,无法动摇。还记得当初铺砖的工人,将整个操场按正方形铺砖(整个操场可视为R行C列的矩阵,矩阵的每个元素为一块正方形砖块),正方形砖块有两种,一种为蓝色,另一种为红色。我们定义他和她之间的“爱情指标”为最大纯色正方形的面积,请你写一个程序求出“爱情指标”。
输入说明 :
第一行两个正整数R和C,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
#include <iostream>
#include <algorithm>
using namespace std;
int love[201][201] = { 0 };
bool isLove(int x, int y,int len)
{
int color = love[x][y];
x++; y++;
if (love[x][y] != color) return false;
for (int i = 1; i <= len; i++)
{
if (love[x - i][y] != color) return false;
if (love[x][y - i] != color) return false;
}
return true;
}
int main()
{
int r, c;
cin >> r >> c;
for (int i = 1; i <= r; i++)
{
for (int j = 1; j <= c; j++)
{
cin >> love[i][j];
}
}
int max = 1;
bool flag = 0;
for (int i = 1; i <= r; i++)
{
for (int j = 1; j <= c; j++)
{
if (r - i < max)//剩余高度小于最大边长跳出
{
flag = 1; break;
}
if (c - j < max)//剩余宽度小于最大边长 换行
{
continue;
}
//判断最大边长
int len = 1, x = i, y = j;
while (x < r&&y < c)
{
if (isLove(x, y,len))
{
x++, y++, len++;
if (len>max) max = len;
}
else
{
break;
}
}
}
if (flag)
break;
}
cout << max*max<< endl;
return 0;
}