luogu#P1003 铺地毯 题解

luogu#P1003 铺地毯 题解

传送门

题意简述

有一个平面,平面上有 \(n\) 个地毯,每个地毯左上角坐标是 \((a_i,b_i)\),并且在 \(x\) 轴和 \(y\) 轴长度为 \(g_i\)\(k_i\)

给定一个点,求出覆盖这个点最上面的地毯是第几个,如果没有地毯覆盖这个点输出-1

思路分析

因为地毯的每个角上的点也算覆盖,所以不难发现每个地毯覆盖范围是 \(x\)\(a_i\)~\(a_i+g_i\)\(y\)\(b_i\)~\(b_i+k_i\)然后通过比大小判断这个地毯是否覆盖此点。知道了这个,我们可以每个地毯依次判断是否覆盖,最后输出最上面的那个地毯。

代码实现(c++)

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
int a[N],b[N],g[N],k[N];
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i]>>b[i]>>g[i]>>k[i];
    int x,y;
    cin>>x>>y;
    int ans=0;
    for(int i=1;i<=n;i++){
        //判断每个地毯是否覆盖这个点,并增加答案
        if(x>=a[i]&&x<=a[i]+g[i]&&y>=b[i]&&y<=b[i]+k[i])ans=i;
    }
    if(ans)cout<<ans<<'\n';
    else cout<<-1<<'\n';//如果没有任何一个地毯覆盖输出-1
    return 0;
}
posted @ 2026-07-18 19:50  Han24666  阅读(0)  评论(0)    收藏  举报