题解
救援问题
1 条题解
-
0
解题思路
每个屋顶要算两件事:
- 往返路程时间:救生船从大本营到屋顶再回来,距离是
2 × sqrt(x² + y²),时间 = 距离 ÷ 速度 50。 - 上下船时间:每人上船 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