1 条题解

  • 0
    @ 2023-3-8 15:24:06

    解题思路:

    题目要求我们找出覆盖某个点的最上面的地毯编号。根据地毯铺设的规则,我们可以按照地毯的编号从大到小的顺序依次检查每个地毯是否覆盖该点。如果一个地毯覆盖了该点,那么它就是当前最上面的地毯。

    #include <iostream>
    #include <vector>
    using namespace std;
    
    // 定义结构体表示地毯
    struct Carpet {
        int id; // 地毯编号
        int x1, y1, len_x, len_y; // 地毯左下角坐标和长宽
    
        // 判断点 (x,y) 是否在该地毯范围内
        bool is_in_carpet(int x, int y) {
            return x >= x1 && x <= x1 + len_x && y >= y1 && y <= y1 + len_y;
        }
    };
    
    int main() {
        int n;
        cin >> n;
    
        Carpet carpets[n]; // 定义结构体数组存储所有地毯信息
        for (int i = 0; i < n; i++) {
            carpets[i].id = i + 1;
    
            // 直接输入地毯信息
            cin >> carpets[i].x1 >> carpets[i].y1 >> carpets[i].len_x >> carpets[i].len_y;
        }
    
        int x, y;
        cin >> x >> y;
    
        int res = -1; // 初始化最上面的地毯编号
        for (int i = n - 1; i >= 0; i--) { // 从后往前依次检查每张地毯
            if (carpets[i].is_in_carpet(x, y)) { // 如果该点在该地毯范围内
                res = carpets[i].id; // 更新最上面的地毯编号
                break;
            }
        }
    
        cout << res << endl;
    
        return 0;
    }
    
    • 1

    信息

    ID
    243
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    3
    已通过
    2
    上传者