ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

ABC057 D - Maximum Average Sets

問題
提出コード

解法

平均値の計算方法を思い出すと、
\frac{(データの値の総和)}{(データの個数)}
ですので、データの個数はより少なく、そしてデータの値の総和はより大きいものを選んだ方が得になります。
ということで、一番少ない個数になるのはA個だけ選んだ時で、データの選び方は降順にソートしたデータを前から順番にとった場合になります。
ということで、まず平均値の最大値がすぐに求められます。
ということで、まずはN個のデータを降順にソートして、大きい方からA個だけ抽出し、平均の最大値を求めてしまいます。
さて、求めた値になるようなデータの選び方を探ります。
2パターンに場合分けをすることができます。
A個抽出したときのデータの最大値をM、最小値をmとします。

  • M=mのとき
    選んだA個の値はすべて同じ値になっています。
    この値がx個存在するとき、A個選ぶ方法は
     _x C _A
    となります。A+1個以降も同様に
     _x C _{A+1}
    のようになっていくので、最終的に
    \sum_{i=A}^{min(x,B)}\ _x C _{i}
    が答えとなります。

  •  M \neq mのとき
    このとき、A+1個以上値を選んだ場合、必ず平均値が最大ではなくなってしまいます(まだ選んでいない数字は、必ず現在の平均値より小さい値になっているためです)。
    よって、A個しか値を選ぶことはできません。
    が、mA+1番目以降にも存在した場合、選ぶパターンを変更することができます。
    mの全体の個数をxmA個選んだ中に含まれる個数をyとすると、答えは
    _x C _y
    となり、これが答えになります。
    ということで、2つのパターンのどちらかに当てはめて計算すれば、答えを求めることができます。