aface0427 @ 2017-11-07 13:50:23
6个int数组炸空间
5个int数组1个char数组WA点1
5个int数组1个bool数组用cinTLE点10
5个int数组1个bool数组scanfWA点8
5个int数组1个bool数组开2560*2560还是炸空间
5个int数组1个bool数组开2505*2505用快读勉强卡过
by xw001 @ 2017-11-07 14:00:02
@aface0427 五个int数组不就行了吗
by aface0427 @ 2017-11-07 18:09:00
@xw001 2333 说得好 可以用四个 不过懒得改
by Bartholomew @ 2017-12-01 21:40:29
@aface0427
看看你的代码! ..
by aface0427 @ 2018-01-30 10:44:57
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
#include<cstring>
#include<cmath>
using namespace std;
#define ll long long
const int maxn=1e6+7;
void read(int &x)
{
char c=getchar();
x=0;
int flag=1;
while(!isdigit(c))
{
if(c=='-')flag=-1;
c=getchar();
}
while(isdigit(c))
{
x=x*10+c-48;
c=getchar();
}
x*=flag;
}
int n,m;
int dp[2505][2505];
int height[2505][2505];
int lef[2505][2505];
int rig[2505][2505];
bool ju[2505][2505];
int dp2[2505][2505];
int main()
{
read(n),read(m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
int x;
read(x);
ju[i][j]=x;
}
}
for(int i=n;i>=1;i--)
{
for(int j=1;j<=m;j++)
{
if(ju[i][j]==1)
{
height[i][j]=0;
}
else height[i][j]=height[i+1][j]+1;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(ju[i][j]==1)
{
lef[i][j]=0;
}
else lef[i][j]=lef[i][j-1]+1;
}
}
for(int i=1;i<=n;i++)
{
for(int j=m;j>=1;j--)
{
if(ju[i][j]==1)
{
rig[i][j]=0;
}
else rig[i][j]=rig[i][j+1]+1;
}
}
for(int i=1;i<=n;i++)
{
if(ju[i][m])dp[i][m]=1;
}
for(int i=1;i<=m;i++)
{
if(ju[n][i])
{
dp[n][i]=1;
dp2[n][i]=1;
}
}
for(int i=1;i<=n;i++)
{
if(ju[i][1])dp[i][1]=1;
}
for(int i=n-1;i>=1;i--)
for(int j=m-1;j>=1;j--)
{
if(ju[i][j])
{
dp[i][j]=min(min(dp[i+1][j+1]+1,rig[i][j+1]+1),height[i+1][j]+1);
}
}
for(int i=n-1;i>=1;i--)
{
for(int j=2;j<=m;j++)
{
if(ju[i][j])
{
dp2[i][j]=min(height[i+1][j]+1,min(dp2[i+1][j-1]+1,lef[i][j-1]+1));
}
}
}
int ans=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
ans=max(ans,max(dp[i][j],dp2[i][j]));
}
}
cout<<ans;
return 0;
}
@[Bartholomew](/space/show?uid=50047)