其实这道题,可以从最后一个输入的数据开始排查,如果说你找到了这个点上面有地毯,那么就直接输出这个值,如果没找到就按照题干的意思输出-1。
至于为什么 那是因为 从后面开始检查 我们可以保证当前这个点所在的这些地毯(从最后一个到第一个) 都是当前位置的最上层地毯 但是我们只能用点和长度表示地毯 所以需要检查地毯和目标点的关系
因此 如果从最后一个地毯开始检查 只要目标点满足地毯的坐标范围 就必然会是最上层的 因为不在范围的不考虑 在范围内的 必须要在最上面 数据从后往前 也就是从上到下地检查地毯啦
是一个有点投机取巧的做法x
#include <iostream> using namespace std; int main() { int n; cin>>n; int x[10005],y[10005],xlen[10005],ylen[10005],i; int targetx,targety; for(i=0;i<n;i++){ cin>>x[i]>>y[i]>>xlen[i]>>ylen[i]; } cin>>targetx>>targety; for(i=n-1;i>=0;i--){ if(targetx>=x[i]&&targetx<=x[i]+xlen[i]){ if(targety>=y[i]&&targety<=y[i]+ylen[i]){ cout<<i+1; return 0;}} } cout<<-1; }