AT_abc003_3 [ABC003C] AtCoderプログラミング講座
Description
[problemUrl]: https://atcoder.jp/contests/abc003/tasks/abc003_3
AtCoder社では、優秀な競技プログラマーの講座動画を $ N $ 個配信しています。
初心者競技プログラマーの高橋くんは、AtCoder社が配信している動画を見て修練しようとしています。
高橋くんの実力はレートという実数値で表され、レートが高いほど実力が高いことを表します。
高橋くんのレートが $ C $ の時に、レート $ R $ の競技プログラマーの講座動画を見ると、高橋くんのレートは $ (C+R)/2 $ に変化します。
高橋くんは、講座動画を合計で $ K $ 個まで好きな順番で見ることができますが、同じ競技プログラマーの講座動画は一度までしか見ることができません。
講座動画を配信している $ N $ 人のレートが与えられた時、高橋くんが講座動画を見ることによって達成できるレートの最大値を求めるプログラムを書いてください。
ただし、高橋くんの初期レートは $ 0 $ です。
入力は以下の形式で標準入力から与えられる。
> $ N $ $ K $ $ R_1 $ $ R_2 $ ... $ R_N $
1. $ 1 $ 行目には、講座動画の数を表す整数 $ N\ (1\ ≦\ N\ ≦\ 100) $ と高橋くんが見ることのできる動画の数を表す整数 $ K\ (1\ ≦\ K\ ≦\ N) $ がスペース区切りで与えられる。
2. $ 2 $ 行目には、講座動画を配信している競技プログラマーのレートを表す整数 $ R_i\ (1\ ≦\ R_i\ ≦\ 4,000) $ がスペース区切りで与えられる。
高橋くんが達成できる最大レートを $ 1 $ 行で出力せよ。
絶対誤差、または、相対誤差が $ 10^{-6} $ 以下であれば許容される。
また、出力の末尾には改行を入れること。 ```
2 2 1000 1500 ``` ```1000.000000 ``` - 以下の方法が最適です。 - まず、レート $ 1000 $ の競技プログラマーの講座動画を見ます。これにより、高橋くんはレート $ 0 $ から $ (0+1000)/2\ =\ 500 $ になります。 - 次に、レート $ 1500 $ の競技プログラマーの講座動画を見ます。これにより、高橋くんはレート $ 500 $ から $ (500+1500)/2\ =\ 1000 $ になります。 - しかし、例えば、以下の方法は最適ではありません。 - まず、レート $ 1500 $ の競技プログラマーの講座動画を見ます。これにより、高橋くんはレート $ 0 $ から $ (0+1500)/2\ =\ 750 $ になります。 - 次に、レート $ 1000 $ の競技プログラマーの講座動画を見ます。これにより、高橋くんはレート $ 750 $ から $ (750+1000)/2\ =\ 875 $ になります。 ```2 1 1000 1500 ``` ```750 ``` - このケースでは高橋くんは $ 1 $ 個の講座動画しか見ることができません。 - レート $ 1500 $ の競技プログラマーの講座動画を見るのが最適です。 ```10 5 2604 2281 3204 2264 2200 2650 2229 2461 2439 2211 ``` ```2820.031250000 ```
Input Format
N/A
Output Format
N/A