AtCoder Beginner Contest 246 C問題 Coupon
問題
提出解答
問題の概要
個の商品があり, 番目の商品は 円である.
クーポンを 枚持っており, 円の商品に対して 枚のクーポンを消費すると, その商品を 円で買うことができる.
全ての商品を買うためには最低でも何円必要か.
制約
解法
(割引後の総和)=(元々の総和) (割引額) なので, 割引額の最大化を目指す.
円以上の商品があるのに, 円未満の商品に対してクーポンを使用することは割引額の最大化に反してしまう.
よって, 方針としては, まず, 全ての商品を 円未満にすることである. 元々 円の商品を 円未満にするためには, 枚のクーポンが必要である.
とする. このとき, であるとき, 割引額は明らかに 円以下であり, 円の割引を達成する事が可能である.
以降では とする. このとき, を を で割った余りとする. 残り 枚のクーポンを用いて, 割引額の最大化を達成するためには, の大きい順にクーポンを使用すれば良い ( の場合は 枚だけ使えば十分).
以上から, を降順に並び替えた列を とし, とする. を
とすると, 答えは である.
時間計算量は を求めるためのソートがボトルネックになり, である.