枚举

根据题目可以得到矩形四个点的坐标(其实只要对角线的两个点就够了)

从最后一张地毯开始(选择从后往前作为枚举方向),判断点是否在该地毯上

如果在则break,输出当前地毯编号;否则输出-1。

#include <bits/stdc++.h>
using namespace std;

#define N 10010

int main(){
    int a[N],b[N],g[N],k[N],n,x,y;
    bool flag = 0;
    cin>>n;
    for(int i = 1;i <= n;i++){
        //cin>>a[i]>>b[i]>>g[i]>>k[i];
        scanf("%d%d%d%d",&a[i],&b[i],&g[i],&k[i]);
    }
    cin>>x>>y;
    
    for(int j=n;j >= 1;j--){    //从末尾开始枚举
        if(a[j] <= x && a[j]+g[j] >= x && b[j] <= y && b[j]+k[j] >= y){
            cout<<j;
            flag = 1;
            break;
        }    //判断点是否在矩形内
    }
    if(flag==0) cout<<-1;
    return 0;
}