题目:
在二维平面上,给定两个矩形,满足矩形的每条边分别和坐标轴平行,求这个两个矩形的并的面积。即它们重叠在一起的总的面积。
输入
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<cstring>
using namespace std;
typedef long long ll;
int main(){
ll x1,y1,x2,y2,x3,y3,x4,y4;
scanf("%lld%lld%lld%lld%lld%lld%lld%lld",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
ll s1=(y2-y1)*(x2-x1);
ll s2=(y4-y3)*(x4-x3);
ll s=s1+s2;
ll a1=max(x1,x3);
ll b1=max(y1,y3);
ll a2=min(x2,x4);
ll b2=min(y2,y4);
//cout<<" ("<<a1<<","<<b1<<")"<<endl;
//cout<<" ("<<a2<<","<<b2<<")"<<endl;
ll yu;
if(a1>=a2||b1>=b2) yu=0;
else yu=(a2-a1)*(b2-b1);
//cout<<" yu="<<yu<<endl;
printf("%lld",s-yu);
return 0;
}