• 周三. 9月 27th, 2023

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn

admin

11月 28, 2021

题目传送门

(f_{i,j})表示以((i,j))为左下角能得到的最大正方形的边长.

#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

int n,t,f[1001][1001],ans;
bool a[1001][1001];

inline int min(int s,int d) {
	if(s > d) return d;
	return s;
}

inline int max(int s,int d) {
	if(s < d) return d;
	return s;
}

int main() {
	scanf("%d%d",&n,&t);
	for(int i = 1;i <= t; i++) {
		int x,y;
		scanf("%d%d",&x,&y);
		a[x][y] = 1;
	}
	for(int i = 1;i <= n; i++)
		for(int j = 1;j <= n; j++)
			if(!a[i][j])
				f[i][j] = min(f[i-1][j],min(f[i][j-1],f[i-1][j-1])) + 1,ans = max(ans,f[i][j]);
	printf("%d",ans);
	return 0;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注