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

浙公网安备 33010602011771号