[2011年NOIP提高组] 铺地毯

首先想到用二维数组,但是内存太大会爆;因为题目说的是最上面的那块地毯,所以暗示我们应该用for循环倒着推,又给了我们每个地毯的大小和位置,那我们直接从后看这块地毯包不包含(x,y)就好了,包含的话,又是倒着推的,那它肯定是最上面那一层了,直接输出。

#include<bits/stdc++.h>
using namespace std;
int main()
{
  int s,ss,n,x[20005],y[20005],i,j,g[20000],k[20000];
  cin>>n;
  for(i=1;i<=n;i++)
  {
    cin>>x[i]>>y[i]>>g[i]>>k[i];
  }
  cin>>s>>ss;
  for(i=n;i>=1;i--)
  {
    if(s>=x[i]&&s<=x[i]+g[i]&&ss>=y[i]&&ss<=y[i]+k[i])
  {
  cout<<i;
  return 0;
  }
  }
  cout<<-1;
}

posted @ 2022-08-14 10:36  zjtofficial  阅读(19)  评论(0编辑  收藏  举报