[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; }