题目链接:这里
题意:一共有n个数,第i个数是a[i],现在你需要选出n1个数和n2个数,使得那n1个数的和除以n1加上n2个数的和除以n2的值最大。
解法:贪心,如果n1>n2,那么交换。然后选择最大的n1个数为n1集合,然后次大的n2个数为n2集合。
代码:

//CF 735B

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
int n, n1, n2, nn1, nn2;
double a[maxn];
int main(){
    cin >> n >> n1 >> n2;
    for(int i = 0; i < n; i++) cin >> a[i];
    if(n1 > n2) swap(n1, n2);
    nn1 = n1, nn2 = n2;
    sort(a, a+n, greater<double>());
    double sum1 = 0, sum2 = 0;
    for(int i = 0; i < n; i++){
        if(n1){
            sum1 += a[i];
            n1--;
        }
        else if(n2){
            sum2 += a[i];
            n2--;
        }
    }
    double ans = (sum1/(1.0*nn1)) + (sum2/(1.0*nn2));
    printf("%.10f\n", ans);
    return 0;
}