洛谷 P1696 [USACO18JAN] Blocked Billboard II B 题解

分析

很明显,可以暴力。

我们可以先定义一个整形二维数组,把割草机广告所在的区域的值都改成 1 1 1,再把牛饲料广告所在的区域的值都改成 2 2 2,再找到值为 1 1 1 的区域的最左端、最右端、最上面、最下面,即可计算面积。

code

#include<iostream>
using namespace std;
int color[2005][2005],ax1,ay1,ax2,ay2,bx1,by1,bx2,by2;
int main() {
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>ax1>>ay1>>ax2>>ay2>>bx1>>by1>>bx2>>by2;
	ax1+=1000,ay1+=1000,ax2+=1000,ay2+=1000,bx1+=1000,by1+=1000,bx2+=1000,by2+=1000;
	//这几个坐标的只可能是负数,但是数组下标不能是负数,所以要将它们的值加上1000,使它们成为正数,否则会RE
	for(int i=ax1+1;i<=ax2;++i) for(int j=ay1+1;j<=ay2;++j) color[i][j]=1;
	for(int i=bx1+1;i<=bx2;++i) for(int j=by1+1;j<=by2;++j) color[i][j]=2;
	//覆盖数组的值
	int x1=2010,x2=0,y1=2010,y2=0;
	for(int i=0;i<=2000;i++)
		for(int j=0;j<=2000;j++)
			if(color[i][j]==1) {
				x1=min(x1,i);
				x2=max(x2,i);
				y1=min(y1,j);
				y2=max(y2,j);
			}
	//找到最上面、最下面、最左边、最右边的点
	if(x2>=x1&&y2>=y1) cout<<(x2-x1+1)*(y2-y1+1);
	else cout<<0;
	//计算面积
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值