3 条题解
-
1
稍微给个感性一点的证明。
对于每一个点集 ,要使某个点 , 要使曼哈顿距离最小,此时可以将二维分开看待。
对于每个维度,如 ,如果他在中位数的左边,我们将 , 则有一半以上的曼哈顿距离 -1 ,另外不到一半的曼哈顿距离 +1,总距离是减小的。
所以,当每个维度的坐标都是中位数的时候,曼哈顿距离是最小的。
不是很严谨,勿喷
n = int(input()) x = [] y = [] for _ in range(n): x1,y1 = map(int, input().split()) x += [x1] y += [y1] x = sorted(x) y = sorted(y) ans = 0 if (n%2): for i in x: ans += abs(i-x[n//2]) for i in y: ans += abs(i-y[n//2]) else : for i in x: ans += abs(i - x[n // 2]) for i in y: ans += abs(i - y[n // 2]) print(ans)
信息
- ID
- 934
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 506
- 已通过
- 56
- 上传者