本题核心分为两部分:K-Means 聚类 + 路径距离计算。
首先使用 K-Means 算法对所有包裹进行聚类:
初始化:
快递员初始位于二维平面坐标原点 (0,0)。现有 N 个快递包裹需要派送,第 i 个包裹的坐标为 (xi,yi),坐标单位为公里。为了减少上门配送次数,公司要求先使用 K-Means 聚类将所有包裹划分为 K 个社区簇,快递员只需将货物送至每个社区簇的聚类中心。
配送时,快递员从原点出发,按照聚类中心到原点的距离由近到远依次访问所有聚类中心,最后返回原点。已知快递员的平均行驶速度为 speed km/h,请计算完成全部配送所需的总时间,单位为秒,结果向下取整。
两个二维点 a=(xa,ya) 与 b=(xb,yb) 之间的欧氏距离定义为:
dist(a,b)=(xa−xb)2+(ya−yb)2.K-Means 聚类的执行规则如下:
50 轮,则停止迭代;否则继续执行分配与更新步骤。聚类结束后,将所有最终聚类中心按到原点的距离升序排序。快递员的完整访问顺序为:
原点→中心1→中心2→⋯→中心M→原点.设该折返路线的总长度为 dtotal,则所需总时间为:
⌊speeddtotal×3600⌋.约束条件
第一行包含三个由空格分隔的整数:K、N 和 speed,分别表示社区个数、快递包裹总数和快递员平均行驶速度(km/h)。
接下来 N 行,每行包含两个实数 xi 和 yi,表示第 i 个包裹的坐标(公里)。
输出一个整数,表示快递员完成全部配送并返回原点所需的总时间(秒,向下取整)。
输入
1 3 20
3 0
0 4
3 4
输出
1200
说明
K 为 1,N 为 3,因此实际聚类中心数为 1。唯一中心最终为三个包裹坐标的算术平均值 (2,38)。
该中心到原点的距离为 22+(38)2=310 km。配送路线为原点 → 中心 → 原点,总长度 dtotal=2×310=320 km。
结合速度 20 km/h,总时间为 ⌊2020/3×3600⌋=1200 秒。因此输出为 1200。
输入
4 4 10
0 -4
1 0
-3 0
0 2
输出
5702
说明
K 为 4,N 为 4,实际聚类中心数也为 4。每个包裹自身构成一个聚类,最终中心就是 4 个包裹坐标。按到原点的距离升序排序后,访问顺序为 (1,0)、(0,2)、(−3,0)、(0,−4)。
路径长度为:原点到 (1,0) 为 1,(1,0) 到 (0,2) 为 5,(0,2) 到 (−3,0) 为 13,(−3,0) 到 (0,−4) 为 5,(0,−4) 返回原点为 4。因此总长度 dtotal=1+5+13+5+4≈15.841619 km。
速度 10 km/h 时,总时间为 ⌊1015.841619×3600⌋=5702 秒。因此输出为 5702。
输入
3 1 7
6 8
输出
10285
说明
K 为 3,N 为 1,因为包裹数量小于社区数量,实际聚类中心数为 1。唯一包裹坐标 (6,8) 就是最终中心。
该中心到原点的距离为 62+82=10 km,折返路线总长度 dtotal=2×10=20 km。
速度 7 km/h 时,总时间为 ⌊720×3600⌋=10285 秒。因此输出为 10285。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册