#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param n int整型 表示有n个数。
# @param c int整型 参数c
# @param a int整型一维数组 ai表示第i个数的大小
# @return long长整型
#
class Solution:
def solve(self , n , c , a ):
# write code here
# 思路:每次取最小的两个数相加
if len(a) < 2:
return 0
if len(a) == 2:
return c*(sum(a))
import heapq
# 初始化最小堆,a内部元素位置调整
heapq.heapify(a)
res = []
# 每一轮取出最小的两个数相加,堆的长度-1,然后更新最小堆
while len(a) > 2:
# 弹出堆顶,堆的长度-1,更新最小堆
a0 = heapq.heappop(a)
# 记录这一轮求和的值
tmp = a0 + a[0]
res.append(tmp)
# 堆顶用求和值替换,更新最小堆
heapq.heapreplace(a, tmp)
return c*(sum(res) + a[0] + a[1])