#abc0033. [abc003_3]AtCoderプログラミング講座
[abc003_3]AtCoderプログラミング講座
问题文
AtCoder社区中,共有N个优秀的竞技程序员的讲座视频。
初学者竞技程序员高桥君想通过观看AtCoder社区发布的视频来进行训练。
高桥君的实力用一个实数值称为"Rating"来表示,Rating越高,实力越强。
当高桥君的Rating为C的时候,如果他观看Rating为R的竞技程序员的讲座视频,他的Rating会变为(C+R)/2。
高桥君可以按任意顺序观看总计K个讲座视频,但是他只能观看同一个竞技程序员的讲座视频一次。
给定N个人的Rating,编写一个程序来计算高桥君通过观看讲座视频可以达到的最大Rating值。
注意,高桥君初始的Rating为0。
输入
输入从标准输入中按以下格式给出:N K
R1 R2 ... RN
- 第1行包含两个整数N和K,分别表示讲座视频的数量(1 ≤ N ≤ 100)以及高桥君可以观看的视频数量(1 ≤ K ≤ N)。
- 第2行包含N个整数Ri,表示每个竞技程序员的Rating值(1 ≤ Ri ≤ 4,000)。
输出
输出高桥君可以达到的最大Rating值,输出一行并以换行符结尾。
允许的绝对误差或相对误差不超过。
输入例子1
2 2
1000 1500
输出例子1
1000.000000
以下方法是最佳策略:
首先观看Rating为1000的竞技程序员的讲座视频。这将使得高桥君的Rating从0变为(0+1000)/2 = 500。
接下来观看Rating为1500的竞技程序员的讲座视频。这将使得高桥君的Rating从500变为(500+1500)/2 = 1000。
但以下方法并不是最佳策略:
首先观看Rating为1500的竞技程序员的讲座视频。这将使得高桥君的Rating从0变为(0+1500)/2 = 750。
接下来观看Rating为1000的竞技程序员的讲座视频。这将使得高桥君的Rating从750变为(750+1000)/2 = 875。
输入例子2
2 1
1000 1500
输出例子2
750
在这个案例中,高桥君只能观看一个讲座视频。
观看Rating为1500的竞技程序员的讲座视频是最佳策略。
输入例子3
10 5
2604 2281 3204 2264 2200 2650 2229 2461 2439 2211
输出例子3
2820.031250000