top1编程
← 返回题目
题解

救援问题

1 条题解

  • 0
    @ 2026-8-4 16:08:45

    解题思路

    每个屋顶要算两件事:

    1. 往返路程时间:救生船从大本营到屋顶再回来,距离是 2 × sqrt(x² + y²),时间 = 距离 ÷ 速度 50。
    2. 上下船时间:每人上船 1 分钟、下船 0.5 分钟,共 人数 × 1.5 分钟。

    把所有屋顶的时间加起来,最后向上取整(ceil)。

    参考代码

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        double total = 0;
        for (int i = 0; i < n; i++) {
            double x, y;
            int p;
            cin >> x >> y >> p;
            double dist = sqrt(x * x + y * y);   // 屋顶到大本营距离
            // 往返2次路程 + 每人上船1分钟 + 每人下船0.5分钟
            total += 2 * dist / 50 + p * 1.0 + p * 0.5;
        }
        cout << (int)ceil(total) << endl;   // 向上取整
        return 0;
    }
    

    复杂度分析

    循环 n 次,时间复杂度 O(n),额外空间复杂度 O(1)。

    • 1