题解:P12326 [蓝桥杯 2023 省 Java B] 矩形总面积
根据容斥原理,
AC Code
#include <iostream>
#include <cmath>
#define maxn 1024
#define mod 1e9+7
#define rep(i,a,b) for(int i=a;i<b;i++)
#define upto(i,a,b) for(int i=a;i<=b;i++)
#define downto(i,a,b) for(int i=a;i>=b;i--)
#define itn int
#define fro for
const int N = 1e6 + 100;
typedef long long ll;
using namespace std;
int main() {
ll x1, y1, x2, y2, x3, y3, x4, y4;
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4;
ll chang1 = (ll)fabs(x1 - x2);//实际上题目没有保证输入顺序,防止负边
ll kuan1 = (ll)fabs(y1 - y2);
ll chang2 = (ll)fabs(x3 - x4);
ll kuan2 = (ll)fabs(y3 - y4);
ll sq1 = chang1 * kuan1;//两个矩形的面积
ll sq2 = chang2 * kuan2;
ll cdx1 = max(x1, x3);//重叠部分的坐标
ll cdx2 = min(x2, x4);
ll cdy1 = max(y1, y3);
ll cdy2 = min(y2, y4);
ll cdchang = cdx2 - cdx1;//重叠部分的长宽
ll cdkuan = cdy2 - cdy1;
ll chongdiesq = 0;
if (cdchang>0 && cdkuan>0)/* 存在*/ {
chongdiesq = cdchang * cdkuan;
}
ll anssq = sq1 + sq2 - chongdiesq;//容斥原理
cout<<anssq;
return 0;
}
完结撒花!