[2011年NOIP提高组] 铺地毯

因为数据规模很大,所以不能用用数组的解决方案。

对于一个坐标,编号大的地毯会覆盖编号小的地毯对之之覆盖。

一个坐标,能被一个地毯覆盖,就不用考虑之前覆盖到此坐标的地毯,最后一个覆盖到这坐标的地毯即最顶层之地毯。

#include<iostream>
#include<cstring>
#include<iomanip>
#include<iterator>
struct cover
{
    int a,b,g,k;
    bool is_cov(int x,int y)
    {
        return x>=a&&y>=b&&x<=(a+g)&&y<=(b+k);
    }
}covs[100000];
int main()
{
    int n;
    std::cin>>n;
    for(int i=0;i<n;i++)
        std::cin>>covs[i].a>>covs[i].b>>covs[i].g>>covs[i].k;
    int x,y;
    std::cin>>x>>y;
    for(int i=n-1;i>=0;i--)
    {
        if(covs[i].is_cov(x,y))
        {
            std::cout<<i+1;
            return 0;
        }
    }
    std::cout<<-1;
}

 

posted @ 2022-08-21 19:57  nichengmeibeiyong  阅读(16)  评论(0编辑  收藏  举报