#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<string>
#include<map>
typedef long long ll;
using namespace std;
int n,m,ans;
int a[][],f[][],s1[][],s2[][];//s1为横向,s2为纵向 //s1[i][j]表示(i,j)最多向左(右)延伸多少个格子,使这些格子中的数都是0(不包括(i,j))
//s2[i][j]表示(i,j)最多向上(左)延伸多少个格子,使这些格子中的数都是0(不包括(i,j))
//f[i][j]表以(i,j)为右下(左下)角的最大对角线长度
int main()
{
cin>>n>>m;
//第一遍左上——右下
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
{
scanf("%d",&a[i][j]);
//如果是0
if(!a[i][j])
{
//向左
s1[i][j]=s1[i][j-]+;
//向上
s2[i][j]=s2[i-][j]+;
}
//如果是1
if(a[i][j])
// f[i-1][j-1]和 (s1[i][j-1],s2[i-1][j])同时取小
//为了防止有1出现
f[i][j]=min(f[i-][j-],min(s1[i][j-],s2[i-][j]))+;
ans=max(ans,f[i][j]);
}
//第二遍右上——左下
memset(f,,sizeof(f));
memset(s1,,sizeof(s1));//数组置0
memset(s2,,sizeof(s2));
for(int i=; i<=n; i++)
for(int j=m; j>=; j--)
{
if(!a[i][j])
{
s1[i][j]=s1[i][j+]+;
s2[i][j]=s2[i-][j]+;
}
if(a[i][j])
f[i][j]=min(f[i-][j+],min(s1[i][j+],s2[i-][j]))+;
ans=max(ans,f[i][j]);
}
cout<<ans<<endl;
return ;
}

最新文章

  1. C#遐想/瞎想
  2. C# Questions
  3. [New Portal]Windows Azure Virtual Machine (16) 使用Azure PowerShell创建Azure Virtual Machine
  4. CI框架源码阅读笔记9 CI的自动加载机制autoload
  5. proxy改变this指向
  6. 斑点检测(LoG,DoG)(下)
  7. 001_JavaScript 错误 - Throw、Try 和 Catch
  8. 浏览器js console对象
  9. kinect学习笔记(三)&mdash;&mdash;深度数据的提取
  10. HTML语言的一些元素(三)
  11. 关于json 的那些知识点
  12. 自动登录 登陆成功那个alert遮盖一直存在bug
  13. SQL开发技巧(二) 【转】感觉他写的很好
  14. Linux下关于解决JavaSwing中文乱码的情况(转)
  15. QTP11完美破解小笔记
  16. Windows Server 2016-查询FSMO角色信息的三种方法
  17. PyTorch官方中文文档:torch
  18. 转---JS 一定要放在 Body 的最底部么?聊聊浏览器的渲染机制
  19. Django项目的创建和设计模式
  20. php的GC机制

热门文章

  1. C++中STL库函数的基本运用
  2. 15-cookie技术和session技术的联系和区别
  3. 在C#中通过使用Newtonsoft.Json库来解析百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据
  4. 持续化运维 DevOps
  5. dubbo 分布式服务框架 介绍
  6. Shiro -- (二) 身份验证基本流程
  7. GO的方法值和方法表达式用法
  8. 常用类String的总结
  9. Nuget打包没有注释显示
  10. python第三方库的安装pip的使用与换源(解决pip下载速度慢)