现在的位置: 首页 > 综合 > 正文

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

2019年02月12日 ⁄ 综合 ⁄ 共 972字 ⁄ 字号 评论关闭

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

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

抱歉!评论已关闭.