两个矩形不相交

题目连接:http://www.noobdream.com/DreamJudge/Issue/page/1211/#

本人想法:题目给定矩形对角线的两个点(并没有仔细规定是正对角线还是反对角线的两个端点)。

不管给定的是哪两个点,都能得出正对角线的左下角和右上角的坐标(当然选择这个只是作为一个参考,可以选择其他),

然后就可以根据坐标来判断两个矩形是相交、相离、还是包含(这是包含这点把我搞的好辛苦)。

#include <iostream>
using namespace std;

int x1,y1,x2,y2,x3,y3,x4,y4;

int main() {
    
    while(~scanf("%d%d%d%d%d%d%d%d", &x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4)) {
        // 输入任意对角线坐标后, 便可以拿到我们想要的数据(就是正对角线的左下角和右上角的坐标) 
        if (x1 > x2) swap(x1, x2);
        if (y1 > y2) swap(y1, y2);
        if (x3 > x4) swap(x3, x4);
        if (y3 > y4) swap(y3, y4);
        // 排除矩形相离和包含 
        if (y2 < y3 || x2 < x3 || y1 > y4 || x1 > x4 || (x1 < x3 && y1 < y3 && x2 > x4 && y2 > y4))
            cout << "NO" << endl;
        else {
            cout << "YES" << endl;
        }
         
    }
    
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/hello-dummy/p/11716458.html