洛谷P1003-铺地毯

题目描述:

有题目的话和别人的高度相似不给审核,放链接吧,无语

https://www.luogu.com.cn/problem/P1003

解析: 

刚拿到这个题目的时候第一个考虑的是 模拟,定义一个二维数组根据输入数据直接对数组进行赋值,最后按照输入的(x,y)去数组中查找相应的位置,输出对应的数据。

比如,第一块地毯的起始位置是(1,0),宽 2,高 3,那么直接对数组中 1<=x<=3,0<=y<=3的区域赋值为 “ 1 ” ......

但根据题目最后所给出的数据范围,我们可以看到n的取值范围(地毯的数量)是 0~10000,如果直接模拟,很容易超时,并且很复杂。

于是,另外一种逆序查找就很方便了。

从最后一块地毯开始找起,看是否覆盖在所求坐标上,如果是,则输出地毯编号,如果没有,则输出“-1”。

附AC代码: 

#include<iostream>
using namespace std;
int a[10001][5];
int main()
{
	int n, i, x, y;
	int flag = -1;
	cin >> n;
	for (i = 1; i <= n; i++)
	{
		for (int j = 1; j <= 4; j++)
		{
			cin >> a[i][j];
		}
	}
	cin >> x >> y;
	for (i = n; i >= 1; i--)
	{
		if (x >= a[i][1] && x <= (a[i][1] + a[i][3]) && y >= a[i][2] && y <= (a[i][2] + a[i][4]))
		{
			cout << i;
			flag = -flag;
			break;
		}
	}
	if (flag == -1)
	{
		cout << flag;
	}

}

cs202 fanyuchen 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值