Related
In following contests:
核心思路
每一轮先按本轮开始时的 K 个中心,把 n 个点全部分配完,再统一更新中心。点到中心用平方欧氏距离,距离平方并列时归入编号更小的中心。非空簇的新中心是簇内加权平均 a=(∑mixi)/(∑mi),b 同理。空簇中心保持不变。迭代中间不舍入,T 轮结束后每个坐标四舍五入保留 4 位小数,第 5 位为 5 时向远离 0 进位。
实现方法
中心坐标用最简分数保存。新中心的分子、分母都由整数权重和直接得到,比较距离平方时再通分,避免二进制浮点把并列判歪,也避免把 .xxxx5 进错位。输出时对绝对值乘 10000,余数达到分母一半就进位,然后补符号,并写成恰好 4 位小数。
用加权 K-Means 把 n 个样本点分成 K 个簇,共迭代 T 轮。第 i 个点的坐标是 (xi,yi),权重是 mi。K 个初始中心 c1,c2,…,cK 已经给出,第 j 个中心的坐标记为 (aj,bj)。
每一轮先用本轮开始时的中心完成全部分配,再统一更新中心。
aj=(∑mixi)/(∑mi),bj=(∑miyi)/(∑mi)
求和只包括本轮归入簇 j 的点。若簇 j 为空,该中心保持不变。
输出 T 轮结束后的 K 个中心。迭代中间不舍入。
第一行三个整数 n、K、T。
接下来 n 行,每行三个整数 xi、yi、mi。
接下来 K 行,每行两个整数 aj、bj。
1≤n≤200
1≤K≤10
1≤T≤20
∣xi∣,∣yi∣,∣aj∣,∣bj∣≤1000
1≤mi≤100
输出 K 行,第 j 行两个数,依次为 aj、bj,中间一个空格。每个数四舍五入保留 4 位小数;第 5 位小数为 5 时,向远离 0 的方向进位。
输入
3 2 1
0 0 1
4 0 3
10 0 1
0 0
10 0
输出
3.0000 0.0000
10.0000 0.0000
说明
到两个中心的距离平方:
中心 1 的新坐标为 ((1⋅0+3⋅4)/4, 0)=(3,0)。中心 2 只有点 (10,0),保持 (10,0)。
输入
1 2 1
0 0 5
-2 0
2 0
输出
0.0000 0.0000
2.0000 0.0000
说明
点 (0,0) 到两个中心的距离平方都是 4,归入编号更小的中心 1。中心 1 更新为 (0,0)。中心 2 没有点,保持 (2,0)。
In following contests:
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册