基础练习 矩形面积交
时间限制:1.0s 内存限制:512.0MB
问题描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出
1.00
题意: 略
分析:一开始没想到这思路,挺好的,具体: 公共部分为两个矩形左边界较大值到右边界较小值,从下边界较大值到上边界较小值。
参考代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define eps 0.0000001
struct point {
double x,y;
point(){}
point (double xx,double yy) {
x = xx;
y = yy;
}
}p1,p2,p3,p4;
int main(){
cin>>p1.x>>p1.y>>p2.x>>p2.y>>p3.x>>p3.y>>p4.x>>p4.y;
double min_x,max_x,min_y,max_y;
min_x = min(max(p1.x,p2.x),max(p3.x,p4.x));
max_x = max(min(p1.x,p2.x),min(p3.x,p4.x));
min_y = min(max(p1.y,p2.y),max(p3.y,p4.y));
max_y = max(min(p1.y,p2.y),min(p3.y,p4.y));
if(min_x - max_x > eps && min_y - max_y > eps) {
printf("%.2f\n",(min_x - max_x) * (min_y - max_y));
} else {
printf("%.2f\n",0);
}
return 0;
}
- 如有错误或遗漏,请私聊下UP,thx