题解 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