1 条题解

  • 0
    @ 2026-10-26 22:20:37

    思路与算法

    逆序扫描地毯,首个闭矩形包含查询点者就是顶层;零长度边界与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

    信息

    ID
    1891
    时间
    1000ms
    内存
    128MiB
    难度
    进阶
    标签
    递交数
    0
    已通过
    0
    上传者