题目链接:https://vjudge.net/contest/279984#problem/C
题目大意:就是有n个数,然后要挑出来n1和n2个,然后呢让n1集合和n2集合的平均数最大,输出这两个平均数的和。
就让n和数从大到小排序,然后贪心地先挑大的放到小的集合中。然后再挑放在大的集合中的。
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <queue>
#include <math.h>
#include <vector>
using namespace std;
typedef long long ll;
int main()
{
double n,n1,n2;
double a[100005];
while(~scanf("%lf%lf%lf",&n,&n1,&n2))
{
for(int i=0;i<n;i++)
{
scanf("%lf",&a[i]);
}
sort(a,a+(int)n,greater<double>());
if(n1>n2)
swap(n1,n2);
double sum=0;
double aver1,aver2;
for(int i=0;i<n1;i++)
{
sum+=a[i];
}
aver1=sum/n1;
sum=0;
for(int i=n1;i<n2+n1;i++)
{
sum+=a[i];
}
aver2=sum/n2;
double ans=aver1+aver2;
printf("%.8f\n",ans);
}
return 0;
}