这题可以使用内置库中的优先队列来解决,我们知道优先队列中heap[0]为最小值,并且只需初始化一次,我们只需要每次提取min再将min修改后放回即可,正好符合本题的要求,关于优先队列的知识大家可以自行了解
import heapq
n,k = map(int,input().split())
list0 = list(map(int,input().split()))
cnt = 0
d = 0
heap = list0
heapq.heapify(heap)
while True:
min = heap[0]
if cnt + min > k :
break
cnt += min
d += 1
heapq.heapreplace(heap,min*2)
print(d)

京公网安备 11010502036488号