输入格式:题目给出三个坐标,分别表示三个矩形的左下、右上坐标
题目:P4122 [USACO17DEC] Blocked Billboard B - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
分析: if 解决麻烦。数学思维:a,b矩形总的面积减over的,S=(x2-x1)*(y2-y1);
x,y表示坐标,
x_over=max(0,min(p.x2,q.x2)-max(p.x1,q.x1));
y_over=max(0,min(p.y2,q.y2)-max(p.y1,q.y1));
再x_over*y_over就是覆盖面积
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define N 1e5+5
struct Fa
{
int x1,y1,x2,y2;
};
int area(Fa r)
{
return (r.x2-r.x1)*(r.y2-r.y1);
}
int output(Fa p,Fa q){
int x_over=max(0,min(p.x2,q.x2)-max(p.x1,q.x1));
int y_over=max(0,min(p.y2,q.y2)-max(p.y1,q.y1));
return x_over*y_over;
}
int main(){
ios::sync_with_stdio(false);
Fa a,b,c;
cin>>a.x1>>a.y1>>a.x2>>a.y2;
cin>>b.x1>>b.y1>>b.x2>>b.y2;
cin>>c.x1>>c.y1>>c.x2>>c.y2;
cout<<area(a)+area(b)-output(a,c)-output(b,c)<<"\n";
//cout<<cnt<<"\n";
return 0;
}
开始就应该认真滴