Urbanization

题目链接: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;
}

猜你喜欢

转载自blog.csdn.net/weixin_44049850/article/details/86650427
今日推荐