【洛谷题解】P1003 [NOIP2011 提高组] 铺地毯 题解

题目传送门

提前上代码:

#include<bits/stdc++.h>

using namespace std;

int a[100005],b[100005],g[100005],k[100005];

int main()
{
	int n,t = -1,x,y;
	cin>>n;
	for(int i = 0;i < n;i++)
		cin>>a[i]>>b[i]>>g[i]>>k[i];
	cin>>x>>y;
	for(int i = n - 1;i >= 0;i--)
	{
		if(a[i] <= x && b[i] <= y && a[i] + g[i] >= x && b[i] + k[i] >= y)
		{
			t = i + 1;
			break;
		}
	}
	cout<<t;
	return 0;
}

提前说一下,我以后都会使用#include<bits/stdc++.h>来写代码,所以不习惯的可以写平常的头文件,如include<iostream>#include<cstring>#include<ctime>等。
好,开始看代码。
头文件说过了,就不再说。
关于变量,我直接将t设为-1,就不用再使用flag等操作去辨认有没有去修改值。
输入就按照格式来。
接着看一看数据范围:

对于 30% 的数据,有 n≤2。
对于 50% 的数据,0≤a,b,g,k≤100。
对于 100% 的数据,有 0≤n≤104,0≤a,b,g,k≤105

好,既然n没到108,那么就可以直接写O(n)的代码。
直接for循环。
里面就是判断是否有叠在这个点上,有k就直接等于i,退出。
如果像我这么写,就要注意for的范围,不能取到n,也就是[0,n)。
然后就可以愉快的提交啦!
有此为证

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值