作者: Turbo时间限制: 1S章节: 基本练习
问题描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入说明
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出说明
输出仅包含一个实数,为交的面积,保留到小数后两位。
输入范例
1 1 3 3
2 2 4 4
输出范例
1.00
代码如下:
#include<iostream>
#include<stdio.h>
using namespace std;
#define max(x,y) (x>y?x:y)
#define min(x,y) (x<y?x:y)
int main(){
double a,b,c,d,A,B,C,D;
cin>>a>>b>>c>>d>>A>>B>>C>>D;
double m,n,M,N;
m = max(min(a,c),min(A,C));
n = max(min(b,d),min(B,D));
M = min(max(a,c),max(A,C));
N = min(max(b,d),max(B,D));
if(M > m && N > n)printf("%.2f",(M-m)*(N-n));
else printf("0.00");//判断面积为0的情况
return 0;
}
运行状态:AC
备注:
1)首先判断面积为0的情况,当一个矩形的横(纵)坐标的最大值小于另一个矩形的横(纵)坐标的最小值时,代表两个矩形不相交。
2)然后如果相交的话,
将横坐标排序,一共四个横坐标,第三个减去第二个,就是相交矩形的一条边的长
对纵坐标作同样处理
3)然后将相交矩形的长和宽相乘,得出结果