1003 铺地毯
题意:首先一个平面,看成一个平面直角坐标系的象限,然后有什么地毯(也就是一个矩形),然后这些个矩形编号1~n,将这些个地毯会有重合覆盖,给定一个查询的点,问这个点最上面的地毯是什么
算法:a b g k这些个,ab代表的左下角的坐标,然后是长,宽
因为我们最后要输出的是一个序号,这个序号肯定是有序的,那么我们从后往前找,只要找到的一个覆盖我们要查询的地毯,那么这个地毯肯定就是最大的,没有必要从头开始找一个最大的
另外就是覆盖的条件判断很好搞,只需要判断查询的点的坐标在不在此地毯的一个点的横坐标为起点,横坐标加此地毯长为终点的范围内;同理,纵坐标也是这样判断
所以这个题类似于贪心吧,或者是模拟,挺简单的
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct data
{
int a,b,x,y;//坐标 长 宽
} d[10001];
int n,f=-1;
int findx,findy;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>d[i].a>>d[i].b>>d[i].x>>d[i].y;//结构体的输入
cin>>findx>>findy;//查询点
for(int i=n;i>=1;i--)
{
if(findx>=d[i].a&&findx<=d[i].a+d[i].x&&findy>=d[i].b&&findy<=d[i].b+d[i].y)
{
cout<<i<<endl;
return 0;
}
}
cout<<-1<<endl;
return 0;
}
本文介绍了一种简单的算法解决地毯覆盖问题,通过输入地毯矩形的左下角坐标、长度和宽度,以及查询点坐标,快速找出覆盖查询点的地毯编号。利用贪心策略,从后向前查找并判断覆盖条件,实现高效查询。
334

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



