青少年编程知识记录 codecoming

【题解】增添战斗力

【题目描述】

大战即将来临,杰洛特需要为自己增添战斗力,广袤的大陆有诸多豪杰,正好可以为杰洛特所用

    杰洛特分别有两处地方n1,n2需要豪杰的战斗力

    一共有n个豪杰,每一个豪杰拥有自己的战斗力pi,当然战斗力是越高越好,可是人人之间还是有差距的。

    因此两个城池决定,各自选出最高战斗力的算术平均值之和。

【输入描述】

第一组一个n表示拥有多少个豪杰,以及一个n1,n2分别表示城池需要的豪杰数

    接下来一行有n个数据分别表示各个豪杰的战斗力

【输出描述】

两个城池最大的战斗力算数平均值之和(结果保留6位小数)

【样例输入】

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;  }



作者:亿万年的星光 分类:题解目录 浏览: