武器强化
时间限制:3000MS
内存限制:589824KB
题目描述:
小明有n(n为奇数)把武器,每把武器都有着各自的等级,同时还有k个强化石,使用一个强化石可以让任意一把武器的等级提升1级,小明既想让武器的等级变高,又想要等级高的武器变多,所以他想要让强化后所有武器等级的中位数越高越好,请你来帮他算一下这个最大值为多少。
输入描述
第一行包含两个正整数n和k,分别表示武器数量和强化石数量。
接下来一行包含n个正整数,第i个数pi表示第i把武器当前的等级。n为奇数,1<= n <=50000,1<k<10^9, 1< pi<10^9
输出描述
输出一个数,表示所有武器等级中位数能达到的最大值。
输入样例
5 4
2 3 3 2 2
输出样例
4
输出解释:2+2 3+1 3+1 2 2,最大中位数为4
思路
暴力解决的方法,以输入样例为例:
5 4
2 3 3 2 2
先排序: 2 2 2 3 3
中间的数加一:2 2 3 3 3
排序: 2 2 3 3 3
中间的数加一:2 2 4 3 3
排序: 2 2 3 3 4
中间的数加一:2 2 4 3 4
排序: 2 2 3 4 4
中间的数加一:2 2 4 4 4
排序: 2 2 4 4 4
没有强化石了,返回4
伪代码:
对武器等级进行排序
while 强化石>0:
强化中间的武器
排序
强化石-1
最后最大的中位数即中间的数
代码
m,n = tuple(map(int,input().split()))
list_a = list(map(int,input().split()))
list_a.sort()
while n > 0:
list_a[m//2] += 1
n -= 1
list_a.sort()
if n <= 0:
break
print(list_a[m // 2])
分析
时间复杂度:O(N²logN) 空间复杂度:O(1)【不算sort的话】
结果
AC率为73%