题目:1749. 阻挡广告牌 II
题解:最后没被遮盖住的部分,分别投影到x轴和y轴上的长度,相乘就是答案。等价于在没遮盖的部分找到x轴上的最大、小值。y轴也是如此。两者相乘即可。注意都被遮盖住的话,就找不到最大小值,所以就要记得和0比较
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef long long LL;
typedef pair<int ,int> PII;
const int N=1e5+10;
const int mod=100000007;
bool sta[2050][2050];
int main(){
int a[3][4];
int sum=0;
for(int i=0;i<2;i++){
cin>>a[i][0]>>a[i][1]>>a[i][2]>>a[i][3];
}
for(int k=0;k<2;k++){
for(int i=a[k][0]+1000;i<a[k][2]+1000;i++){
for(int j=a[k][1]+1000;j<a[k][3]+1000;j++){
if(k==0){
sta[i][j]=1;
}else{
sta[i][j]=0;
}
}
}
}
int b=2050,c=2050,d=0,e=0;//b、d记录x轴上最小、大值。c,e记录y轴上最小、大值
for(int i=a[0][0]+1000;i<a[0][2]+1000;i++){
for(int j=a[0][1]+1000;j<a[0][3]+1000;j++){
if(sta[i][j]){
b=min(b,i),d=max(d,i);
c=min(c,j),e=max(e,j);
}
}
}
cout<<max(0,d-b+1)*max(0,e-c+1);//注意都被遮盖住的情况
return 0;
}