有两个矩形相框。查找给定的两个帧是否重叠。框架通过提供
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/