AcWing 1761. 阻挡广告牌+O(1)超简单思路
原题链接
简单
作者:
废物宝宝
,
2022-03-30 17:21:15
,
所有人可见
,
阅读 156
#include<iostream>
using namespace std;
int f[3][4];//存坐标
int getArea(int k){//一个矩形的面积
return (f[k][2]-f[k][0])*(f[k][3]-f[k][1]);
}
int computeArea(int a,int b){//两个矩形公共面积
int ax1=f[a][0],ay1=f[a][1],ax2=f[a][2],ay2=f[a][3];
int bx1=f[b][0],by1=f[b][1],bx2=f[b][2],by2=f[b][3];
if (ax2<bx1||bx2<ax1||ay2<by1||by2<ay1) return 0;//没有交集返回0
int lx=max(ax1,bx1);//左边界x为两个左边界x较大的
int ly=max(ay1,by1);//左边界y为两个左边界y较大的
int rx=min(ax2,bx2);//右边界x为两个右边界x较小的
int ry=min(ay2,by2);//右边界y为两个右边界y较小的
return (rx-lx)*(ry-ly);
}
int main(){
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
cin>>f[i][j];
int area=getArea(0)+getArea(1);//两个广告牌的大小
area=area-computeArea(0,2)-computeArea(1,2);//广告牌与卡车的重合面积
cout<<area<<endl;
return 0;
}