题目
分析
这道题目不难。关键是两点:
- 怎么判断一个点在不在一块地毯(一个矩形之内);
- 如何保证找到的是“最上面的地毯”。
给定矩形的左上角(x, y)
以及长宽g, x
,判定一个点(假定它的坐标是(a, b)
)在一个矩形之内的公式就是:
a <= x && x <= a + g && b <= y && y <= b + k
要保证找到最上面的地毯,根据题意,先输入的是先铺好的地毯(也就是最下面的那块),最后输入的倒是最上面的地毯。所以遍历的时候逆序遍历即可。
答案
思考
这道题中,我用了稍微进阶一些的STL中的vector
和pair
。因此,在输入某块地毯左上角坐标以及长宽时,用到了pair
的成员first
和second
。如果改用常规的struct
当然也是完全可以的。
int a = carpets[i].first.first;
int b = carpets[i].first.second;
int g = carpets[i].second.first;
int k = carpets[i].second.second;
有兴趣的读者可以自行改写。