悬线法WA on #1???
查看原帖
悬线法WA on #1???
784060
NGC_6357楼主2023/10/12 19:22
#include <bits/stdc++.h>
#define N 2005
using namespace std;

int n, m, ans;
int ma[N][N], u[N][N], l[N][N], r[N][N];

void left(){
	for(int i = 1; i <= n; i++){
		for(int j = 2; j <= m; j++){
			if(ma[i][j - 1] == 1) l[i][j] = l[i][j - 1];
		}
	}
}

void right(){
	for(int i = 1; i <= n; i++){
		for(int j = m; j > 1; j--){
			if(ma[i][j] == 1) r[i][j - 1] = r[i][j];
		}
	}
}

void solve(){
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
            if(i > 1 && ma[i - 1][j] == 1){
				u[i][j] = u[i - 1][j] + 1;
				l[i][j] = max(l[i][j], l[i - 1][j]);
				r[i][j] = min(r[i][j], r[i - 1][j]);
			}
			int a = r[i][j] - l[i][j] + 1;
            int b = min(a, u[i][j]);
            ans = max(ans, b);
		}
	}
}

signed main(){
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			scanf("%d", &ma[i][j]);
			u[i][j] = 1;
			l[i][j] = j;
			r[i][j] = j;
		}
	}
	left();
	right();
	solve();
	printf("%d", ans);
	
	return 0;
}
2023/10/12 19:22
加载中...