有两个矩形相框。查找给定的两个帧是否重叠。框架通过提供
X

ÿ
两点的坐标:框架的左上角和右下角。共享一侧的两个框架被认为是重叠的。
输入格式
第一个整数
Ť
表示测试用例的数量。对于每个测试用例,都有
2
输入行。
第一行包括
4
整数:表示
2
第一帧的点数。第一个整数表示
X
坐标,第二个整数表示
ÿ
第一帧左上角的坐标。接下来的两个整数是
X

ÿ
右下角的坐标。类似地,第二条线以类似的方式表示第二帧的两个点的坐标。
输出格式
对于每个测试用例,输出(
1个
要么
0
)表示是否
2
框架重叠。
1个
表示帧重叠,而
0
表示帧不重叠。
约束条件
1个
Ť
10
-
10
4
X
10
4
-
10
4
ÿ
10
4
时限
1秒
输入示例:

2
0 10 10 0
5 5 15 0
0 2 1 1
-2 -3 0 2
输出:
1
0
我的代码:
#include <bits/stdc++.h>
using namespace std;

struct Point
{
    int x, y;
};

bool doOverlap(Point l1, Point r1, Point l2, Point r2)
{
    if (l1.x >= r2.x || l2.x >= r1.x)
        return false;

    if (l1.y <= r2.y || l2.y <= r1.y)
        return false;

    return true;
}

int main()
{
int t,l1x,l1y,r1x,r1y,l2x,l2y,r2x,r2y,l1,r1,l2,r2;
cin>>t;
while(t-- >0)
{
   cin>>l1x;
   cin>>l1y;
   cin>>r1x;
   cin>>r1y;
   cout<<endl;
   cin>>l2x;
   cin>>l2y;
   cin>>r2x;
   cin>>r2y;

  Point l1 = {l1x,l1y};
  Point r1 = {r1x,r1y};
  Point l2 = {l2x,l2y};
  Point r2 = {r2x,r2y};

   if (doOverlap(l1, r1, l2, r2)) {
        cout<<"1";
        }
    else{
        cout<<"0";
    }
}
  return 0;
}

最佳答案

共享一侧的两个框架被认为是重叠的。
当您的代码考虑共享一侧时,不会通过使用>=<=进行覆盖。
以下是没有等号的示例。

bool doOverlap(Point l1, Point r1, Point l2, Point r2)
{
    if (l1.x > r2.x || l2.x > r1.x)
        return false;

    if (l1.y < r2.y || l2.y < r1.y)
        return false;

    return true;
}

关于c++ - 我的代码通过了测试用例,但是在我提交时显示了错误的答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62631702/

10-11 19:28