题目见网站可以去查。
其实这题我觉得挺简单,看了部分题解似乎是自己的做法投机取巧了,但是个人觉得是很正常的思路。
首先,抓住一个点就是要最上面的地毯,这提醒要倒序判断!!
所以
思路:
1、获取数据,输入
2、逆序判断,这个地毯的覆盖面有没有覆盖到要求的点
3、输出结果
具体代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,x[10009],y[10009],a[10009],b[10009],o,p,flag=1;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>y[i]>>a[i]>>b[i];//获取每块地毯的数据
}
cin>>o>>p;//要求判断是否遮盖的点
for(int i=n;i>0;i--)
{
if(o>=x[i]&&o<=x[i]+a[i]&&p<=y[i]+b[i]&&p>=y[i])//判断,这个点的坐标xy是否在地毯的覆盖范围内
{
cout<<i;//输出
flag=0;//记录已找到这块地毯
break;
}
}
if(flag)//如果没有符合条件的地毯就输出-1
cout<<-1;
return 0;
}
本文介绍了一种通过倒序遍历数据集来查找特定坐标是否被地毯覆盖的算法实现。该方法首先获取所有地毯的边界数据,然后从最后一块地毯开始逆序检查,直至找到覆盖目标坐标的地毯或遍历结束。文章提供了完整的C++代码示例。
1243

被折叠的 条评论
为什么被折叠?



