2024暑假集训普及2班2 day2 T6 CCC题解 id:9897

题目描述

时间: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的好成绩

2 个赞

@朱博瑞 你标签上的题面id建议改改

?为什么?

1 个赞

让我看看

1 个赞

不是哥们

1 个赞

你s是什么类型的!

1 个赞

int 保留5位小数你是nb的。。。

1 个赞

收到

2 个赞

AC了

2 个赞

义父在上

1 个赞

AC了就好

1 个赞

1 个赞

@楼逸杨 代码没有格式化,看着不好,我帮你:

#include <bits/stdc++.h>
using namespace std;
int a[5005];
int main() {
	int n,k,s=0;
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a + 1,a + n + 1);
	for(int i = n - k + 1;i <= n;i++){
		s = (s + a[i])/2;
	}
	printf(“%.5lf”,s);
	return 0;
}

[quote=“Ultra_Third_Eye, post:14, topic:18642, username:周子寓”]

#include <bits/stdc++.h>
using namespace std;
int a[5005];
int main() {
	int n,k,s=0;
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a + 1,a + n + 1);
	for(int i = n - k + 1;i <= n;i++){
		s = (s + a[i])/2;
	}
	printf(“%.5lf”,s);
	return 0;
}
引号是中文

@楼逸杨 我只是帮他格式化了一下,因为他没格式化,所以引号英文变中文

你家族迁徙会吗

会啊,已经有人发题解了

@楼逸杨

但我还不会

你看的题解也是这个吗