小红正在为自研的无人驾驶配送机器人开发一套路径规划系统。为了提高效率,配送系统需要先将分散的包裹坐标通过无监督学习算法进行聚类,确定 K 个核心服务点,然后再由机器人按顺序前往这些点。 小红选用了经典的 K-Means 算法。具体聚类与路径规划逻辑如下: 1. 初始化: - 如果服务中心数量 K 大于或等于包裹总数 N ,则每个包裹坐标直接作为最终的服务点坐标。 - 否则,先计算所有包裹到坐标原点 (0,0) 的欧几里得距离,并按距离从小到大排序。若距离相同,保持原始输入顺序。选取排序后的前 K 个包裹坐标作为初始聚类中心,并赋予编号 0 到 K-1 。 2. 聚类迭代(最多迭代 50 次): - 分配阶段:将每个包裹分配给距离其最近的聚类中心。若某包裹到多个中心的距离相等,则分配给编号最小的中心。 - 更新阶段:将每个中心的位置更新为其所分配的所有包裹坐标的平均值。如果某个中心没有分配到任何包裹,则其坐标保持不变。 - 终止条件:计算所有中心在本次更新中移动的欧几里得距离之和。若该距离之和小于 10^-4 ,或者已完成 50 次迭代,则停止。 3. 路径规划与耗时计算: - 聚类完成后,将最终得到的 K 个服务点坐标按其到原点 (0,0) 的欧几里得距离进行升序排列。 - 机器人从原点 (0,0) 出发,依次访问这 K 个点,最后返回原点 (0,0)。 - 计算机器人走完这段闭环路径的总长度,并根据平均时速计算总耗时。 请帮小红计算完成配送任务所需的总秒数。
第一行包含三个空格分隔的整数,分别是服务中心数量 K 、包裹总数 N ( 1 ≤ K ≤ 10,1 ≤ N ≤ 100 ),以及配送机器人的平均速度 speed( 1 ≤ speed ≤ 100 ,单位 km/h)。 接下来的 N 行,每行包含两个实数 x_i 和 y_i ( -100.0 ≤ x_i, y_i ≤ 100.0 ),表示每个包裹在地图上的公里坐标。
输出一个整数,表示完成任务所需的总时间(秒)。结果请向下取整。
2 3 36 3.0 4.0 6.0 8.0 0.0 5.0
1710
3 10 30 1.2 1.5 1.8 1.2 5.0 5.2 5.5 4.8 4.9 5.5 -2.0 3.0 -2.5 3.5 -1.8 2.8 1.5 1.8 5.2 5.0
2502
考点:排序
数据规模 N ≤ 100 | 限制 1 秒 / 256MB | 标准输入输出
参考方向:排序
先用 O(n log n) 排序把无序变有序,后续处理往往就简单了。
思路框架(排序 通法 · 非本题专属)
实现要点:在 C++ 中用 std::sort,Python 用 sorted();注意自定义比较函数的严格弱序。
复杂度:时间 O(n log n) | 空间 O(log n) ~ O(n)
该范式的通法易错点
对照本题
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。
样例 1:输入 2 3 36 / 3.0 4.0 / 6.0 8.0 / 0.0 5.0 → 输出 1710
在本样例中, K=2, N=3 ,机器速速度为 36 km/h。
样例 2:输入 3 10 30 / 1.2 1.5 / 1.8 1.2 / 5.0 5.2 / 5.5 4.8 / 4.9 5.5 / -2.0 3.0 / -2.5 3.5 / -1.8 2.8 / 1.5 1.8 → 输出 2502
For 3 communities, 10 packages, and speed 30 km/h, the 10 packages are clustered into 3 centers. Sorted by distance to the origin, the centers are approximately (1.5, 1.5), (-2.1, 3.1), and (5.15, 5.125). The total distance traversed visiting them in order and returning to the origin takes approximately 2502 seconds (floor applied). Note: if K >= N, all N points become their own cluster centers.
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-04月08号AI岗。