题解 P5602 【小E与美食】

· · 题解

在吃一样量的食物时,明显吃好吃的舒适度最大,所以我们对每种食物的美味度排序,优先吃最美味的食物,然后对吃1,2,3......n种食物的最大舒适度取max,输出就行了。

你以为这个题这么简单吗???

坑点1:美味度的sum要开long long 。qwq

坑点2:sum的平方会炸long long。所以我们要用sum先除食物种数再*sum 。qwq

代码如下:

#include<bits/stdc++.h>
using namespace std;
#define N 300001
int n;
int a[N];
long long int sum;
double maxn;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    sort(a+1,a+n+1);//排序
    for(int i=n;i>=1;i--)//优先吃好吃的食物
    {
        sum+=a[i];
        maxn=max(maxn,sum*1.0/(n-i+1)*sum);//先除再乘qwq
    }
    printf("%lf",maxn);
}

为什么我橙题都WA3遍啊QAQ