アルゴリズムのクラッシュにトレーニング
時間制限を:256.0メガバイト:メモリ制限を1.0秒
問題の説明
高校で、彼は他の人にそれが見えるが、それは比較的単純な問題である、彼女を見つけることができませんと。クラッシュは、彼が行うことができる唯一のことです。彼は彼女がアクションを魅惑見て、彼女の場所を見て、毎日体操た場合にのみ、十分です。遊び場ああ上Caizhuan、自分の位置は、彼らが、彼らの関係は、レンガの間に固定されているだけのような場所に立つことができる振り払うことができないということです。静止(運動場全体は、行列R行とC列とみなすことができ、行列の各要素は、正方形のレンガである)、2個の方形レンガ、のための1つがある労働者、全体遊び場タイル正方形舗装覚え青、他の赤。私たちは、あなたが取得するためのプログラムの書き込み、彼と彼女の間で最大の黒四角は、「愛の指標」を定義する「愛の指標を。」
入力フォーマット
最初の行と2つの正の整数R C.
次のR行とC列は0青いレンガで表される赤レンガ1で表される全体の遊び場を、記載されています。
出力形式
は彼と彼女の間の「愛のインデックス」を意味番号、。
サンプル入力
5. 8
0 0 0 1 1 1 1 0
。1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 1
。1 1 1 1 1 1 0 0
。1 1 1 1 1 0 0 1
出力例
9
そして、のデータサイズが合意
; R&LT、C <= 10の40%のデータ
データR&LTの70%、C <= 50;
100%のデータR、C <= 200。
#include <stdio.h>
int R, C;
int playground[202][202] = { 0 };
int max(int a, int b)
{
return a > b ? a : b;
}
int find(int x, int y)
{
int width;
for (width = 2; x + width - 1 < R && y + width - 1 < C; ++width)
{
for (int i = x; i <= x + width - 1; ++i)
{
if (playground[i][y + width - 1] != playground[x][y])
return (width - 1) * (width - 1);
}
for (int j = y; j <= y + width - 1; ++j)
{
if (playground[x + width - 1][j] != playground[x][y])
return (width - 1) * (width - 1);
}
}
return (width - 1) * (width - 1);
}
int main()
{
scanf("%d %d", &R, &C);
for (int i = 0; i < R; ++i)
for (int j = 0; j < C; ++j)
scanf("%d", &playground[i][j]);
int max_area = 1;
for (int i = 0; i < R; ++i)
for (int j = 0; j < C; ++j)
max_area = max(max_area, find(i, j));
printf("%d", max_area);
return 0;
}