#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, cover[10001][4], a, b, flag = 0;
cin >> n;
for (int i = 1; i <= n; ++ i)
cin >> cover[i][0] >> cover[i][1] >> cover[i][2] >> cover[i][3];
cin >> a >> b;
while (!flag && n)
{
if (a >= cover[n][0] && b >= cover[n][1] && a <= cover[n][0] + cover[n][2] && b <= cover[n][1] + cover[n][3])
{
flag = 1;
break;
}
n --;
}
if (flag)
cout << n;
else
cout << "-1";
}
* 因为要找覆盖这个点的最上面一块地毯,因此从最后一组数据开始判断。
* 如果题目给的点在这块地毯覆盖范围内,则结束循环。
* 四个整数 a, b, g, k 分别表示铺设地毯的左下角的坐标 (a, b)以及地毯在 x 轴和 y 轴方向的长度
(代码中用 cover[i][0],cover[i][1] cover[i][2] cover[i][3]表示)
覆盖范围是以 (a, b), (a+g,b),(a,b+k),(a+g,b+k)为顶点的矩形。
因此只要题目给定的坐标x,y(代码中用的 a,b 表示 qwq) 满足条件x >= a && y >= b && x <= a+g && y <= b+k
即表示该点在地毯覆盖范围内。
* 用flag判断,找到了赋值为1,退出循环后如果flag还是为0,说明此处没有被地毯覆盖。