矩形并的面积(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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】