92分玄关
查看原帖
92分玄关
849399
yhr2013楼主2025/1/11 14:40
#include<iostream>
#include<cstring>
using namespace std;
int n,m,a[2505][2505],dp[2505][2505],dp1[2505][2505],dp2[2505][2505],b[2505][2505];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	dp1[0][0]=dp2[0][0]=0;
	for(int i=1;i<=m;i++){
		dp1[1][i]=0;
	}
	for(int i=1;i<=n;i++){
		dp2[i][1]=0;
	}
	for(int i=1;i<=m;i++){
		if(a[1][i-1]==0)dp1[1][i]=dp1[1][i-1]+1;
		else dp1[1][i]=0;
	}
	for(int i=1;i<=n;i++){
		if(a[i-1][1]==0) dp2[i][1]=dp2[i-1][1]+1;
		else dp2[i][1]=0;
	}
	for(int i=2;i<=n;i++){
		for(int j=2;j<=m;j++){
			if(a[i][j-1]==0) dp1[i][j]=dp1[i][j-1]+1;
			else dp1[i][j]=0;
			if(a[i-1][j]==0) dp2[i][j]=dp2[i-1][j]+1;
			else dp2[i][j]=0;
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]==0){
				dp[i][j]=0;
			}
			else dp[i][j]=min(dp[i-1][j-1],min(dp1[i][j],dp2[i][j]))+1;
			ans=max(ans,dp[i][j]);
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			b[i][n-j+1]=a[i][j];
		}
		for(int j=1;j<=m;j++) a[i][j]=b[i][j];
	}
	memset(dp,0,sizeof(dp));
	memset(dp1,0,sizeof(dp1));
	memset(dp2,0,sizeof(dp2));
	for(int i=1;i<=m;i++){
		dp1[1][i]=0;
	}
	for(int i=1;i<=n;i++){
		dp2[i][1]=0;
	}
	for(int i=1;i<=m;i++){
		if(a[1][i-1]==0)dp1[1][i]=dp1[1][i-1]+1;
		else dp1[1][i]=0;
	}
	for(int i=1;i<=n;i++){
		if(a[i-1][1]==0) dp2[i][1]=dp2[i-1][1]+1;
		else dp2[i][1]=0;
	}
	for(int i=2;i<=n;i++){
		for(int j=2;j<=m;j++){
			if(a[i][j-1]==0) dp1[i][j]=dp1[i][j-1]+1;
			else dp1[i][j]=0;
			if(a[i-1][j]==0) dp2[i][j]=dp2[i-1][j]+1;
			else dp2[i][j]=0;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]==0){
				dp[i][j]=0;
			}
			else dp[i][j]=min(dp[i-1][j-1],min(dp1[i][j],dp2[i][j]))+1;
			ans=max(ans,dp[i][j]);
		}
	}
	cout<<ans;
}

WA on #5

2025/1/11 14:40
加载中...