1003 铺地毯

本文介绍了一种简单的算法解决地毯覆盖问题,通过输入地毯矩形的左下角坐标、长度和宽度,以及查询点坐标,快速找出覆盖查询点的地毯编号。利用贪心策略,从后向前查找并判断覆盖条件,实现高效查询。

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;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值