题目
模拟
思路
首先我们需要确认出满足什么条件时才算做给定的点被覆盖
假设给定的点为 ( x , y ) (x,y) (x,y),给定的矩形为 ( a , b , g , k ) (a,b,g,k) (a,b,g,k)(各参数的作用与题目描述一致)。
那么,当满足
{ x > = a x < = a + g y > = b y < = b + k \begin{cases} x>=a \\ x<=a+g \\ y>=b \\ y<=b+k \end{cases} ⎩ ⎨ ⎧x>=ax<=a+gy>=by<=b+k
时,坐标 ( x , y ) (x,y) (x,y) 被矩形 ( a , b , g , k ) (a,b,g,k) (a,b,g,k) 覆盖。
这道题要求最上面的矩形,那么从后往前遍历所有矩形,一旦遇到给定的点被覆盖的情况,则退出循环,输出答案即可。
代码
#include <stdio.h>
int main(void) {
int n = 0;
scanf("%d", &n);
int a[n][4], i = 0;
for (i = 0; i < n; i++) {
scanf("%d%d%d%d", &a[i][0], &a[i][1], &a[i][2], &a[i][3]);
}
int x = 0, y = 0, ans = 0;
scanf("%d%d", &x, &y);
for (i = n - 1; i >= 0; i--) {
if (x >= a[i][0] && x <= a[i][0] + a[i][2] && y >= a[i][1] &&
y <= a[i][1] + a[i][3]) {
ans = i + 1;
break;
}
}
printf("%d\n", ans);
return 0;
}