3 条题解

  • 2
    @ 2024-5-27 16:56:42

    中位数

    n = int(input()) # 输入上班族人数 n
    
    X = [] # 用于存放所有上班族的工作地点横坐标
    Y = [] # 用于存放所有上班族的工作地点纵坐标
    
    # 读取所有上班族的工作地点坐标,并添加到X和Y列表中
    for i in range(n):
        x, y = map(int, input().split())
        X.append(x)
        Y.append(y)
    
    # 对X和Y列表进行排序,以便后续计算中位数
    X = sorted(X)
    Y = sorted(Y)
    
    # 计算X和Y的中位数
    # 当n是奇数时,中位数为中间的一个点
    # 当n是偶数时,任何位于两个中间点之间的点作为最优点都会有相同的距离和,
    # 用索引 n//2 可以直接获取中位位置的值
    medianX = X[n // 2]
    medianY = Y[n // 2]
    
    # 使用中位数计算所有点到中位数的距离和
    # 这是因为曼哈顿距离在一维中以中位数为最优聚集点
    dist_sum = sum(abs(i - medianX) for i in X) + sum(abs(i - medianY) for i in Y)
    
    print(dist_sum) # 输出最小的距离和
    

    信息

    ID
    934
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    506
    已通过
    56
    上传者