我为它写了代码。结果是这样的:
n = int(input())
cords = [list(map(int, input().split())) for _ in range(n)]
cords.sort(key=lambda x: x[1])
total = None
for col in range(1, n + 1):
s = 0
for row in range(1, n + 1):
cur = cords[row - 1]
cur_x = cur[1]
cur_y = cur[0]
s += abs(cur_x - col)
s += abs(cur_y - row)
if total is None:
total = s
elif s < total:
total = s
print(total)
但是在第 10 次测试时它崩溃了。告诉我出了什么事?


一般来说,您正确地解决了问题。有一些事情需要或可以改进。按重要性降序排列:
代码中的错字
代码中的排序是按列号完成的,但应该按行号完成。
无需遍历列
尽管解析另有说明,但可以在不借助枚举的情况下计算所需列的数量。所需的列号是列号的中位数。为了得到中位数,坐标按列排序,取平均坐标。有更高级的方法可以找到中位数,但它们不适用于这个问题:
梳码
最后一个解决方案表明可以独立计算水平和垂直步数。让我们摆脱索引,让代码更 Pythonic: