处理一下障碍物与广告牌的关系即可
#include <bits/stdc++.h>
using namespace std;
int x[3][2], y[3][2];
int getzc(int a, int b)
{
int x1=max(x[a][0], x[b][0]), y1=max(y[a][0], y[b][0]);
int x2=min(x[a][1], x[b][1]), y2=min(y[a][1], y[b][1]);
return max(0, x2-x1)*max(0, y2-y1);
}
int main()
{
for(int i=0; i<3; i++)
for(int j=0; j<2; j++)
cin>>x[i][j]>>y[i][j];
int res=0;
for(int i=0; i<2; i++)
res+=getzc(i, i)-getzc(i, 2);
cout<<res;
return 0;
}
附官方做法
#include <bits/stdc++.h>
using namespace std;
struct Rect {
int x1, y1, x2, y2;
int area() {
return (y2 - y1) * (x2 - x1);
}
};
int intersect(Rect p, Rect q) {
int xOverlap = max(0, min(p.x2, q.x2) - max(p.x1, q.x1));
int yOverlap = max(0, min(p.y2, q.y2) - max(p.y1, q.y1));
return xOverlap * yOverlap;
}
int main() {
Rect a, b, t; // billboards a, b, and the truck
cin >> a.x1 >> a.y1 >> a.x2 >> a.y2;
cin >> b.x1 >> b.y1 >> b.x2 >> b.y2;
cin >> t.x1 >> t.y1 >> t.x2 >> t.y2;
cout << a.area() + b.area() - intersect(a, t) - intersect(b, t) << endl;
}
这是什么逻辑,为什么可以这样啊
🐮哇
妙哇,不过这个结论推出来应该要花一些时间😂
可以的,原来还能这样的 .. .我总感觉分类要分好多类的.... 原来那么简单