64 暗恋

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;
}
Yesterday is history,tomorrow ismystery,but today is a gift!That why it is called Present!
原文地址:https://www.cnblogs.com/VictorierJwr/p/12878282.html