Python 数组数字调整问题:最小代价实现均匀分布
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)
原文地址: https://www.cveoy.top/t/topic/ndIW 著作权归作者所有。请勿转载和采集!