有着强大魔法能力的小橘最近有点无聊,它使用魔法暂时的将小冰分割成了许多闪耀的蓝色光点 -- 我们称之为“小冰光点”,并且创建了一个 n 行 m 列的二维魔法阵,将由小冰组成的蓝色光点放在二维魔法阵的点上,组成好看的图案。
这时,有一位路过的 Qindy 学姐看到了这个魔法阵,她觉得这个魔法阵中有种图案很好看,她将其称之为 -- “星辰之心”。现在,Qindy 学姐想找到最大的那颗星辰之心,请你用你的魔法 -- “代码”,来帮助 Qindy 学姐找到最大的星辰之心吧!
一个大小为 k 的“星辰之心”被定义为:
k 个小冰光点例如:
?1?
111
?1?
??1??
??1??
11111
??1??
??1??
其中 ? 代表可以是 0 也可以是 1。
对于二维魔法阵,当其方格为 1 时,则代表格子上有一个小冰光点;当方格为 0 时,则代表格子上没有小冰光点。
输入
输入包含若干行。
第一行包含两个正整数 n (1 \leq n \leq 1000) 和 m (1 \leq m \leq 1000),代表二维魔法阵的大小。
接下来的 n 行 m 列,每个格子包含一个数字,若为 1,则代表这个格子上有小冰光点,若为 0,则代表这个格子上没有小冰光点。
输出
输出包含一行一个正整数,代表你找到的最大的“星辰之心”
样例
| 标准输入 复制文本 |
6 7 0010000 0111000 1111110 0011100 0011000 0010000 |
| 标准输出 复制文本 |
2 |
提示
样例的星辰之心是以第 3 行第 3 列的小冰光点为中心,大小为 2 的星辰之心。
对于棋盘的输入,我们可以使用 char 输入。但如果我们需要使用 int 来输入,则需要一位一位的输入,方法如下:
C/C++ 语言都可:
#include <stdio.h>
#include <iostream>
using namespace std;
int a[1005][1005];
int main() {
int n, m;
cin >> n >> m;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
scanf("%1d", &a[i][j]);
return 0;
}
这里的 %1d 指的是输入 int 类型变量 (%d),并且一位一位输入。如果是两位两位那就是 %2d,以此类推。