题目大意:求两个矩形相交的面积,矩形的边均平行于坐标轴。
我的想法是把矩形的八个x坐标和y坐标分别排序,然后相加的小矩形的四个顶点一定是排序后的中间值。
另外还有判断一下是否相交。
AC代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
using namespace std;
double x[4], y[4];
inline bool judge(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) {
if (x1 <= x3 && x1 <= x4 && x2 <= x3 && x2 <= x4) return true;
else if (x3 <= x1 && x3 <= x2 && x4 <= x1 && x4 <= x2) return true;
else if (y1 <= y3 && y1 <= y4 && y2 <= y3 && y2 <= y4) return true;
else if (y3 <= y1 && y3 <= y2 && y4 <= y1 && y4 <= y2) return true;
else return false;
}
inline void comp_x(double x1, double x2, double x3, double x4) {
x[0] = x1, x[1] = x2, x[2] = x3, x[3] = x4;
sort(x, x+4);
return ;
}
inline void comp_y(double y1, double y2, double y3, double y4) {
y[0] = y1, y[1] = y2, y[2] = y3, y[3] = y4;
sort(y, y+4);
return ;
}
int main() {
double x1, y1, x2, y2, x3, y3, x4, y4;
while (~scanf("%lf%lf%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4)) {
if (judge(x1, y1, x2, y2, x3, y3, x4, y4)) {
printf("0.00\n");
} else {
comp_x(x1, x2, x3, x4);
comp_y(y1, y2, y3, y4);
printf("%.2lf\n", (x[2]-x[1])*(y[2]-y[1]));
}
}
return 0;
}