链接:https://ac.nowcoder.com/acm/contest/46310/D?&headNav=acm
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
uu是一个伟大的魔法师,她有n堆糖果。
由于她想得到更多的糖果,她可以施展无数次魔法,魔法的效果是她可以选择任意一堆糖果,使得那堆糖果的数量增加h,如果有任何一堆糖果的数量在施展魔法后超过了k,uu就会永远失去释放魔法的能力。
uu想知道她最多能得到多少颗糖果?
输入描述:
每组输入的第一行为 n (1 <= n <= 2e6), k (1 <= k <= 1e9), h (0 <= h <= 1e9).
接下来一行为 n 个数字,代表每堆糖果的数量 ai (1 <= ai <= 1e9)
输出描述:
输出一个整数,代表uu能得到最多糖果的数量。
示例1
输入
3 9 1
1 3 5
输出
28
示例2
输入
3 4 2
1 5 2
输出
14
分析
注意
本题需要注意两个地方:
- 在所有的糖堆都到达上限后,还应该再最后加一个 h 。因为仅仅是在这个题目里得到最多的糖,如果在达到上限后再用魔法的话,能使糖果的数量再多一个 h 。而规则里没说一定不能失去魔法,即使最后因超过上限而失去魔法也没有关系。
- 在输入描述里 n 和 k 都是 => 1,只有 h 是 => 0 。这说明存在着 h = 0 (即:用魔法糖果数量不增加)的情况。按所选择的算法的情况而定,可能需要考虑 h = 0 这一可能情况。
可能会有人对数据的范围抱有疑问。一般来说,现在的机器,int 的最大值是 231 ,即:2e9 。足够储存所输入的数据了。
但最后输出的糖果数量总和最大可以达到 2e15,所以,对于总和,我们要用 long long int 来储存。(long long int 最大是 263,即:2e18)
数组定义
根据题意,由于我们要储存每堆糖果的数量,所以我们可以定义一个 int 数组。这个数组一共有 n 个元素,而 (1 <= n <= 2e6)。所以,我们可以直接定义这个数组有 2e6 个元素。
int a[200