【题解】增添战斗力
【题目描述】
大战即将来临,杰洛特需要为自己增添战斗力,广袤的大陆有诸多豪杰,正好可以为杰洛特所用
杰洛特分别有两处地方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; }