洛谷 P5602 小E与美食 (尚贤)

题目:https://www.luogu.com.cn/problem/P5602

代码:

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

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

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

坑点2:sum的平方会炸long long。所以我们要用sum先除食物种数再*sum 。
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#define INF 0x3f3f3f3f * 2
#define SIZE (int)1e5 * 3 + 10
using namespace std;
int a[SIZE];

double f1(const int &);

int main() {
	freopen("cpp.in", "r", stdin);
	freopen("cpp.out", "w", stdout);
	int n;
	scanf("%d", &n);
	for (int i = 1; i <= n; ++i) {
		scanf("%d", &a[i]);
	}
	sort(a + 1, a + n + 1);
	printf("%lf\n", f1(n)); 
	return 0;
}

double f1(const int &n) {
	long long sum = 0;
	double ans = -INF;
	for (int i = n; i >= 1; --i) {
		sum += a[i];
		ans = max(ans, sum * 1.0 / (n - i + 1) * sum);
	}
	return ans;
}
发布了33 篇原创文章 · 获赞 0 · 访问量 167

猜你喜欢

转载自blog.csdn.net/weixin_42790071/article/details/105493080
今日推荐