小红需要使用 K-Means 把 n 个三维点划分为 k 个簇。 取输入的前 k 个点作为编号 0 到 k-1 的初始质心。每轮先把每个点分配给欧氏距离最近的质心,距离相同时选择编号较小的簇;再用簇内点的坐标均值更新质心。若某簇为空,则该质心保持不变。 当所有质心的每个坐标变化量都小于 10^-6 ,或已经完成 100 轮时停止。输出最后一次分配得到的簇编号。
第一行输入 n,k 。接下来 n 行,每行输入一个点的三个浮点坐标。 保证 1 ≤ n ≤ 1000 , 1 ≤ k ≤ n ,坐标范围为 [-100,100] 。
输出 n 行,第 i 行是第 i 个点所属的簇编号。
3 2 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0
0 1 0
3 2 0.0 0.0 0.0 2.0 2.0 2.0 0.0 1.0 0.5
0 1 0
考点:计算几何
数据规模 n ≤ 1e3 | 限制 1 秒 / 256MB | 标准输入输出
参考方向:计算几何
把几何关系转成坐标运算,用整数运算避免浮点误差。
思路框架(计算几何 通法 · 非本题专属)
实现要点:叉积 cross = x1*y2 - x2*y1;用它判断顺时针/逆时针和共线。
复杂度:时间 O(n) ~ O(n²) | 空间 O(n)
该范式的通法易错点
对照本题
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。
样例 1:输入 3 2 / 0.0 0.0 0.0 / 0.0 1.0 1.0 / 1.0 1.0 0.0 → 输出 0 / 1 / 0
第三个点到两个初始质心等距,因此归入编号更小的簇 0。
样例 2:输入 3 2 / 0.0 0.0 0.0 / 2.0 2.0 2.0 / 0.0 1.0 0.5 → 输出 0 / 1 / 0
第三个点更接近质心 0。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-06月12号AI岗。