84pts,求调啦
查看原帖
84pts,求调啦
526470
zhuyuhao1123楼主2024/8/27 10:13
#include<bits/stdc++.h>
using namespace std;
int n,m,a[2501][2501],ans,fa[2501][2501],fb[2501][2501];
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;++i)
	for(int j=1;j<=m;++j) cin>>a[i][j];
	memset(fa,0x7fff,sizeof(fa));
	memset(fb,0x7fff,sizeof(fb));
	for(int i=1;i<=n;++i)
	if(a[i][1]==1) fa[i][1]=1;
	for(int i=1;i<=m;++i)
	if(a[1][i]==1) fa[1][i]=fb[1][i]=1;
	for(int i=1;i<=n;++i)
	if(a[i][m]==1) fb[i][m]=1;
	for(int i=2;i<=n;++i)
	for(int j=2;j<=m;++j)
	if(a[i][j]==1)
	{
		int ka,kb;
		for(ka=i-1;ka>=1;--ka)
		if(a[ka][j]==1) break;
		for(kb=j-1;kb>=1;--kb)
		if(a[i][kb]==1) break;
		fa[i][j]=min(fa[i-1][j-1],min(i-ka-1,j-kb-1))+1;
	}
	for(int i=2;i<=n;++i)
	for(int j=m-1;j>=1;--j)
	if(a[i][j]==1)
	{
		int ka,kb;
		for(ka=i-1;ka>=1;--ka)
		if(a[ka][j]==1) break;
		for(kb=j+1;kb<=m;++kb)
		if(a[i][kb]==1) break;
		fb[i][j]=min(fb[i-1][j+1],min(i-ka-1,kb-j-1))+1;
	}
	for(int i=1;i<=n;++i)
	for(int j=1;j<=m;++j)
	if(fa[i][j]!=0x7fff) ans=max(ans,fa[i][j]);
	for(int i=1;i<=n;++i)
	for(int j=1;j<=m;++j)
	if(fb[i][j]!=0x7fff) ans=max(ans,fb[i][j]);
	cout<<ans<<endl;
	return 0;
}

WA 2和6两个点

2024/8/27 10:13
加载中...