题解 | #铺地毯#
铺地毯
https://ac.nowcoder.com/acm/problem/16593
第一次写题解,还是挺紧张的,其实这就是水题,虽然我试过可能最暴力的解法也可以过,但是就完全没有必要了,关键就是化区间为端点的思路(就是最简单的前缀和思想,虽然并未涉及sum[i]=a[i]+sum[i-1]之类的)
解法如下:
#include<iostream>
using namespace std;
int n,x,y;//n是地毯数量,x,y为所求点的坐标
int a[100001],b[100001],g[100001],k[100001];
int main()
{
ios::sync_with_stdio(false);//习惯用cin,cout了,数据大了用scanf,printf会好一点
cin>>n;//读入数据
for(int i=1;i<=n;i++)
{
cin>>a[i]>>b[i]>>g[i]>>k[i];
}
cin>>x>>y;
int flag=-1;//给一个flag直接赋值为-1,这样就会减少一个if判断的可能
for(int i=n;i>=1;i--)//倒序查找
{
if(a[i]<=x&&a[i]+g[i]>=x&&b[i]<=y&&b[i]+k[i]>=y)//对所求点进行判断而不是整个空间进行判断
{
flag=i;
break;//找到就直接break,在很多场景倒序可能需要花费的循环次数会少一些
}
}
cout<<flag;
return 0;
}