题目描述
时间:1s 空间:256M
题目描述:
C是一个变量,一开始C = 0,给你包含n个数的a数组,取其中任意k个数的排列a1,a2,…,ak,并依次运算C = (C+ai)/2.
你的任务是使得最终的C尽可能大
输入格式:
第一行两个数 n k (1<=k<=n<=100)(1<=k<=n<=100)
第二行n个数,a1,a2,…,an(1<=a_i<=5000)a1,a2,…,an(1<=ai<=5000)
输出格式:
输出C,保留5位小数
样例输入1:
2 2 1000 1500
样例输出1:
1000.00000
样例输入2:
2 1 1000 1500
样例输出2:
750.00000
样例输入3:
10 5 2604 2281 3204 2264 2200 2650 2229 2461 2439 2211
样例输出3:
2820.03125
题解
一道纯纯贪心题
首先
我们的任务是让C尽可能的大
那我们就要让这k个数运算出来的值尽可能的大
于是我们就可以sort一下数组
sort(a + 1,a + n + 1);
让他有序,然后把后面k数进行运算,就可以得出答案
for(int i = n - k + 1;i <= n;i++)
{
s = (s + a[i])/2;
}
向这样
最后
注意样例是保留了5位小数,所以我们用printf输出5位即可
printf("%.5lf",s);
然后就可以获得AC的好成绩
我从我信奥OJ上搬过来的