HDOJ 2056 Rectangles(坐标排序、矩形面积并)

来源:互联网 发布:手机淘宝可以比价吗 编辑:程序博客网 时间:2024/06/01 10:51

题目大意:求两个矩形相交的面积,矩形的边均平行于坐标轴。

我的想法是把矩形的八个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;}



0 0
原创粉丝点击