分析
很明显,可以暴力。
我们可以先定义一个整形二维数组,把割草机广告所在的区域的值都改成 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;
}