1 条题解
-
0
思路与算法
逆序扫描地毯,首个闭矩形包含查询点者就是顶层;零长度边界与n=0都按来源提示处理,和矩形并面积目标不同。
按上述模型建立状态或枚举对象,依代码中的顺序处理输入并输出完整答案。
正确性说明
铺设编号越大越晚,逆序找到的第一个覆盖者上方没有别的覆盖地毯,恰是最上层;全部不含查询点则无覆盖。
复杂度
O(n)时间及O(n)矩形存储;从后向前最坏检查全部矩形。
易错点
两端和角点都包含;提示允许n=0及零长度地毯,不因正文正整数而漏掉。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; struct R { long long a, b, g, k; }; int main() { int n; cin >> n; vector<R> r(n); for (auto &v : r) cin >> v.a >> v.b >> v.g >> v.k; long long x, y; cin >> x >> y; for (int i = n - 1; i >= 0; i--) if (r[i].a <= x && x <= r[i].a + r[i].g && r[i].b <= y && y <= r[i].b + r[i].k) { cout << i + 1 << "\n"; return 0; } cout << -1 << "\n"; }
- 1