1.题目链接
链接:Link
2.题目大意:
有n个瓶子,每个瓶子初始化装有vi升的水,现在我有另一个能装s升的水x。我的目标是用给定的n瓶水来装满x,并且使得n个瓶子中最少的水最大,输出最少水的升数。若不能倒满x,则输出-1.
3.解题思路:
这个题目可以用贪心来做,分以下几种情况:
- 若所有n瓶水加起来都不能装满x,则输出-1;
- 能装满x,从最多水的瓶子开始到,倒到与最少水的瓶子有一样多的水的时候就换下一个最大水的瓶子来倒,但是最后没有用到最少水的那个瓶子。这时应该输出最少水的数值;
- 承接上一种情况,但是用到了最少水的瓶子,这时分两种情况:
- (1)当倒到最少水的瓶子时,n个水瓶里的水是一样多的。如果x中剩余需要倒的水正好是n的倍数,则输出
min(x) - res(x) / n;
- (2)若不是n的倍数,则输出:
min(x) - res(x) / n - 1;
Done