蓝桥杯刷题day06——平均

1、题目描述

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

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

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

样例输入
10
1 1
1 2
1 3
2 4
2 5
2 6
3 7
3 8
3 9
4 10

样例输出
27

样例说明

只更改第 1,2,4,5,7,8 个数,需要花费代价 1+2+4+5+7+8=27。

2、解析

使得数组中每种数出现次数相等的最小代价

  1. 读取n和计算目标出现次数c。

  2. 创建一个长度为10的空列表ls,用于存储每种数对应的代价。

  3. 循环n次,读取每个数和对应的代价,将代价存储到ls中对应数的列表中。

  4. 计算累加代价p,遍历ls中的每个列表,将其排序并累加除去最大的c个代价值。

3、python代码

python 复制代码
n=int(input())
c=n//10
ls=[[] for i in range(10) ]
for i in range(n):
    a,b=map(int,input().split())
    ls[a].append(b)
p=0
for i in range(10):
    ls[i].sort()
    p+=sum(ls[i][:-c])

print(p)

4、运行结果

相关推荐
我今晚不熬夜22 分钟前
使用单调栈解决力扣第42题--接雨水
java·数据结构·算法·leetcode
flashlight_hi1 小时前
LeetCode 分类刷题:209. 长度最小的子数组
javascript·算法·leetcode
展信佳_daydayup2 小时前
0-1 深度学习基础——文件读取
算法
高斯林.神犇2 小时前
冒泡排序实现以及优化
数据结构·算法·排序算法
Github项目推荐2 小时前
跨平台Web服务开发的新选择(5802)
算法·架构
Jolyne_4 小时前
树节点key不唯一的勾选、展开状态的处理思路
前端·算法·react.js
秋难降4 小时前
正则表达式:为什么它成了程序员的 “分水岭”?
python·算法·正则表达式
ai2things4 小时前
MemoryOS 代码解析
算法·llm·agent
没有bug.的程序员4 小时前
《常见高频算法题 Java 解法实战精讲(1):链表与数组》
java·算法·链表·数组
范特西_5 小时前
矩阵中的最长递增路径-记忆化搜索
c++·算法