Problem1722--收集金币

1722: 收集金币

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 128 MiB

Description

题目背景

你说的对,但是《surf》是由Microsoft自主研发的一款全新不开放世界冒险游戏。游戏发生在一个被称作「edge」的浏览器,在这里,被神选中的人将被授予「冲浪板」,导引冲浪。你将扮演一位名为「冲浪者」的神秘角色,在自由的冲浪中中邂逅性格各异、能力独特的可拾取物,和他们一起避开章鱼,找回失散的金币——同时,逐步发掘「surf」的真相。

题目描述

       霓格是一位冲浪玩家,他发现他拥有了将《surf》中的金币转移到现实世界的能力。现在他有n堆金币,但是他只能取出一堆,幸运的是他可以将这n堆金币合并成一堆,不幸的是他每将两堆金币合并成一堆就会使分数增加(分数增加的值等于两堆金币之和整除k,若等于0则加1),并在霓格将金币转化为现实时扣除相应金币数量。霓格想要使自己最后获得的金币尽可能多,想请你计算出分数的最小值

Input

输入格式

共三行。
第一行是一个整数 n(1≤n≤10000) ,表示金币的堆数。

第二行是一个整数k(1≤k≤10)

第二行包含 n 个整数,用空格分隔,第 i个整数 ai(1≤ai̤≤20000) 是第 i 堆金币的数目。

Output

输出格式

一个整数,也就是最小的分数值。输入数据保证这个值小于 2^31

 

Sample Input Copy

3
2
1 2 9

Sample Output Copy

7

HINT

你可以使用python自带的数据机构最小堆来解决
import heapq#导入heapq库
a=[]#创建一个最小堆
heapq.headpush(a,i)#将i放入最小堆
heapq.heappop(a)#返回最小堆中最小的值,并将其删除

Source/Category