矩形并的面积(51Nod-2488)

题目

在二维平面上,给定两个矩形,满足矩形的每条边分别和坐标轴平行,求这个两个矩形的并的面积。即它们重叠在一起的总的面积。

输入

8个数,分别表示第一个矩形左下角坐标为(A,B),右上角坐标为(C,D);第二个矩形左下角坐标为(E,F),右上角坐标为(G,H)。
保证A<C,B<D,E<G,F<H。
保证所有数的绝对值不超过2*10^9,矩形并的面积≤2*10^9。

输出

输出一个数表示矩阵并的面积。

输入样例

-3 0 3 4 0 -1 9 2

输出样例

45

思路:简单容斥原理,注意判断一下相交面积是否合法即可

源程序

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define EPS 1e-9
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define LL long long
const int MOD = 1E9+7;
const int N = 2000+5;
const int dx[] = {0,0,-1,1,-1,-1,1,1};
const int dy[] = {-1,1,0,0,-1,1,-1,1};
using namespace std;
struct Node{
    LL x;
    LL y;
}A1,A2,B1,B2,C1,C2;
int main(){
    scanf("%lld%lld%lld%lld",&A1.x,&A1.y,&A2.x,&A2.y);
    scanf("%lld%lld%lld%lld",&B1.x,&B1.y,&B2.x,&B2.y);

    C1.x=max(min(A1.x,A2.x),min(B1.x,B2.x));
    C1.y=max(min(A1.y,A2.y),min(B1.y,B2.y));
    C2.x=min(max(A1.x,A2.x),max(B1.x,B2.x));
    C2.y=min(max(A1.y,A2.y),max(B1.y,B2.y));
    LL s1=(A2.x-A1.x)*(A2.y-A1.y);
    LL s2=(B2.x-B1.x)*(B2.y-B1.y);
    LL s3=(C2.x-C1.x)*(C2.y-C1.y);

    if(C2.x>C1.x&&C2.y>C1.y)
        printf("%d\n",s1+s2-s3);
    else
        printf("%d\n",s1+s2);
	return 0;
}

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值