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

代码实现:

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)

有一个长度为 n 的数组n 是 10 的倍数每个数 ai 都是区间 0 9 中的 整数。小明发现数组里每种数出现的次数不太平均而更改第 i 个数的代价为 bi他想更改若干个数的值使得这 10 种数出现的次数相等都等于 n10 请问 代价和最少为多少。python代码【输入格式】输入的第一行包含一个正整数 n 。接下来 n 行第 i 行包含两个整数 ai bi 用一个空格分隔。【输出格式】输出一行包

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

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