专栏文章
题解:P12326 [蓝桥杯 2023 省 Java B] 矩形总面积
P12326题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipiaec5
- 此快照首次捕获于
- 2025/12/03 12:27 3 个月前
- 此快照最后确认于
- 2025/12/03 12:27 3 个月前
根据容斥原理,,因此我们先算出两个矩形的面积,再算出重叠部分的长和宽,再特判它们是否都大于零(即是否存在),最后套用公式。
AC Code
CPP
#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;
}
完结撒花!
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...