题解 | #铺地毯#

铺地毯

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;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务