Python 数组数字调整问题:最小代价实现均匀分布

给定一个长度为 n 的数组(n 是 10 的倍数),每个数 ai 都是区间 [0, 9] 中的整数。小明发现数组里每种数出现的次数不太平均,而更改第 i 个数的代价为 bi,他想更改若干个数的值使得这 10 种数出现的次数相等(都等于 n/10 ),请问 代价和最少为多少。

输入格式

输入的第一行包含一个正整数 n 。

接下来 n 行,第 i 行包含两个整数 ai, bi ,用一个空格分隔。

输出格式

输出一行包含一个正整数表示答案。

思路

统计每个数出现的次数,计算出需要将每个数调整到的次数,然后对每个数分别计算调整的代价,取最小值即可。

代码实现

n = int(input())
a = []
cnt = [0] * 10
for i in range(n):
    ai, bi = map(int, input().split())
    a.append((ai, bi))
    cnt[ai] += 1
avg = n // 10
ans = 0
for i in range(10):
    if cnt[i] > avg:
        for j in range(cnt[i] - avg):
            # 将超过平均值的数调整到平均值
            ans += a[j * n // 10 + i][1]
    elif cnt[i] < avg:
        for j in range(avg - cnt[i]):
            # 将少于平均值的数调整到平均值
            ans += a[(cnt[i] + j) * n // 10 + i][1]
print(ans)
Python 数组数字调整问题:最小代价实现均匀分布

原文地址: https://www.cveoy.top/t/topic/ndIW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录