0平均 - 蓝桥云课 (lanqiao.cn)
问题描述
有一个长度为n的数组(n是10的倍数),每个数ai都是区间[0,9 中的整数。小明发现数组里每种数出现的次数不太平均,而更改第个数的代价为b;,他想更改若千个数的值使得这10种数出现的次数相等(都等于),请问代价和最少为多少
输入格式
输入的第一行包含一个正整数n。
接下来n行,第i行包含两个整数 ai,b;,用一个空格分隔。
输出格式
输出一行包含一个正整数表示答案
import os
import sys
# 请在此输入您的代码
n=int(input())
numbers=[[] for i in range(10)] #[[] [],[]....] 0-9每个数字的代价bi独立保存
for i in range(n):
a,b=map(int,input().split())
numbers[a].append(b) #
ans=0
k=n//10 #求出10种数每个数字相等的次数
for i in range(n):
ls=sorted(numbers[i]) #排列每个数字的代价 如数字1:[1,2,3]
ans+=sum(ls[:-k]) #因为每个数字都要有k个,所以倒数k个保留,前面的都去替换,并且代价相加
pritn(ans)