【题解】增添战斗力
【题目描述】
大战即将来临,杰洛特需要为自己增添战斗力,广袤的大陆有诸多豪杰,正好可以为杰洛特所用
杰洛特分别有两处地方n1,n2需要豪杰的战斗力
一共有n个豪杰,每一个豪杰拥有自己的战斗力pi,当然战斗力是越高越好,可是人人之间还是有差距的。
因此两个城池决定,各自选出最高战斗力的算术平均值之和。
【输入描述】
第一组一个n表示拥有多少个豪杰,以及一个n1,n2分别表示城池需要的豪杰数
接下来一行有n个数据分别表示各个豪杰的战斗力
【输出描述】
【样例输入】
4 1 2 1 2 3 4
【样例输出】
6.500000
【题目分析】
1.贪心思想:让n值小的先加的大
2.首先要求平均战斗力高,那挑选的肯定是高战力的,至于怎么分配另外讨论
3. 最大的那几个数分配给数量少的那个军队
4.小的那几个数分配给数量多的那个军队
【参考代码】
?#include<iostream>
#include<algorithm>
using namespace std;
int n,n1,n2;
int arr[10000];
int cmp(int a,int b) {
return a>b;
}
int main() {
double res1 = 0.0,res = 0.0;
cin>>n>>n1>>n2;
int nums = n1+ n2;
for(int i = 0; i < n; i++) {
cin>>arr[i];
}
//排序
sort(arr,arr+n,cmp);
int mini = min(n1,n2);
for(int i = 0; i < (n1+n2); i++) {
if(i<mini) {
res1+=arr[i];
}
res += arr[i];
}
printf("%.6lf",(res1/mini) + (res-res1)/(n1+n2-mini));
return 0;
}扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。
