问题描述
给定鸡场数量
n
n
n,养鸡天数
m
m
m,每次增加数量
k
k
k
每一天开始时,每个养鸡场都增加k只鸡;每一天结束时,将数量最多的鸡场数量减半(向下取整)
问题分析
因为每次选择数量最多的鸡场,所以使用大顶堆即可。
代码示例
import heapq as hp
def solve():
N, M, K = map(int, input().split())
chicken_list = list(map(int, input().split()))
chicken_list = list(map(lambda x: -x, chicken_list))
hp.heapify(chicken_list)
for i in range(M):
tmp = -hp.heappop(chicken_list) - (i + 1) * K
tmp = tmp // 2
hp.heappush(chicken_list, -tmp)
res = 0
for i in range(N):
res += -hp.heappop(chicken_list)
return res + N * M * K
print(solve())