救援算法:优化您的救援计划
思路:\n首先,我们需要按照屋顶与大本营的距离进行排序,以确定救援的顺序。然后,我们可以按照以下步骤进行计算:\n1. 初始化总时间为0。\n2. 对于每个屋顶,计算从大本营到该屋顶的距离。由于救生船的速度是50米/分钟,所以时间可以通过距离除以速度来计算。\n3. 将该屋顶上的人数乘以2,因为每人上船需要1分钟,每人下船需要0.5分钟。\n4. 将上述时间加到总时间中。\n5. 返回总时间,向上取整。\n代码实现如下:\ncpp\n#include <iostream>\n#include <vector>\n#include <cmath>\n#include <algorithm>\nusing namespace std;\n\nstruct Rooftop {\n double x;\n double y;\n int num;\n};\n\nboolean cmp(Rooftop a, Rooftop b) {\n double dist_a = sqrt(pow(a.x, 2) + pow(a.y, 2));\n double dist_b = sqrt(pow(b.x, 2) + pow(b.y, 2));\n return dist_a < dist_b;\n}\n\nint main() {\n int n;\n cin >> n;\n vector<Rooftop> rooftops(n);\n for (int i = 0; i < n; i++) {\n cin >> rooftops[i].x >> rooftops[i].y >> rooftops[i].num;\n }\n sort(rooftops.begin(), rooftops.end(), cmp);\n double total_time = 0;\n for (int i = 0; i < n; i++) {\n double dist = sqrt(pow(rooftops[i].x, 2) + pow(rooftops[i].y, 2));\n double time = dist / 50;\n total_time += time;\n total_time += rooftops[i].num * 2;\n }\n cout << ceil(total_time) << endl;\n return 0;\n}\n
原文地址: https://www.cveoy.top/t/topic/p67X 著作权归作者所有。请勿转载和采集!