问题 https://www.luogu.org/problemnew/show/P1003
这道题不难,可以用来热身。
问题是有个小坑,一开始想的是直接打n*n的表,每一次输入一个地毯的坐标的时候,把他覆盖的所有(x,y)点都置为-1,这样最后输入要查询的坐标的时候就可以直接打印了。这样的办法在需要查询多个点的时候比较快。坑就坑在,数据范围,x,y <= 100,000 , 如果按照这个思路走,一定会超出内存的。另,查询只有一次,因此用这个方法和常规的得到要查询的坐标再去计算,话费的时间差不多。所以么办法了,还是常规思路吧。
依次存储所有点的信息
获取要查询的点
依次遍历所有点,只要地毯覆盖了这个点,直接更新覆盖的地毯id
#include <stdio.h> #define N 10000 int main() { long carpet[N][4] = {{0}}, x, y; int on_carpet = -1, n; int i, j; scanf("%d", &n); for (i=0; i<n; i++) { scanf("%ld%ld%ld%ld", carpet[i], carpet[i]+1, carpet[i]+2, carpet[i]+3); } scanf("%ld%ld", &x, &y); for (i = 0; i<n; i++) { if (carpet[i][0] <= x && x <= carpet[i][0]+carpet[i][2] && carpet[i][1] <= y && y <= carpet[i][1]+carpet[i][3] ) { on_carpet = i+1; } } printf("%d", on_carpet); return 0; }