给定二维笛卡尔坐标系下两个边平行于坐标轴的矩形。请计算这两个矩形所覆盖的区域的面积。
输入描述
输入第一行为四个整数 ,表示第一个矩形的两个对角坐标 ;
第二行为四个整数,表示第二个矩形的两个对角坐标 。
输出描述
每组测试用例在单独的一行上输出一个整数表示输入的两个矩形覆盖的区域的总面积。
样例说明
对于第一组样例,其可视化如下图。
对于第二组样例,其可视化如下图。
对于第三组样例,其可视化如下图。
对于第四组样例,其可视化如下图。
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 3 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 4 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main(){
long long s,s1,s2,c=0;
long long a[2][2],b[2][2],x=0,y=0;
scanf("%lld%lld%lld%lld",&a[0][0],&a[0][1],&a[1][0],&a[1][1]);
scanf("%lld%lld%lld%lld",&b[0][0],&b[0][1],&b[1][0],&b[1][1]);
s1=(a[0][0]-a[1][0])*(a[0][1]-a[1][1]);
s2=(b[0][0]-b[1][0])*(b[0][1]-b[1][1]);
if(a[0][0]>=b[1][0]||a[1][0]<=b[0][0]) x=0; //独立
else
{
if(a[1][0]>=b[1][0]&&a[0][0]<=b[0][0]) //先判断包含,再判断相交
x=b[1][0]-b[0][0];
else if(b[1][0]>=a[1][0]&&b[0][0]<=a[0][0])
x=a[1][0]-a[0][0];
else if(a[1][0]>b[0][0]&&a[1][0]<b[1][0])
x=a[1][0]-b[0][0];
else if(b[1][0]>a[0][0]&&b[1][0]<a[1][0])
x=b[1][0]-a[0][0];
}
if(a[0][1]>=b[1][1]||a[1][1]<=b[0][1]) y=0;
else
{
if(a[1][1]>=b[1][1]&&a[0][1]<=b[0][1])
y=b[1][1]-b[0][1];
else if(b[1][1]>=a[1][1]&&b[0][1]<=a[0][1])
y=a[1][1]-a[0][1];
else if(a[1][1]>b[0][1]&&a[1][1]<b[1][1])
y=a[1][1]-b[0][1];
else if(b[1][1]>a[0][1]&&b[1][1]<a[1][1])
y=b[1][1]-a[0][1];
}
c=x*y;
s=s1+s2-c;
//printf("%lld,%lld,%lld\n",x,y,c);
printf("%lld\n",s);
}