考点:前缀和
这题很巧妙,只需要暴力枚举两边的前缀和即可,答案只会出现在两边的某一边。
如果两边平均值不相等,左边平均值大于右边平均值,假设答案出现在两边都要有,那么左边平均值一定大于两边一起的平均值(右边平均值较小),矛盾。所以答案只会出现在某一边。
下面放代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 5e5 + 10;
int n;
double a[N], s1[N], s2[N];
double res;
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i ++ ) scanf("%lf", &a[i]);
for (int i = 1; i <= n; i ++ ) s1[i] = s1[i - 1] + a[i];
for (int i = n; i >= 1; i -- ) s2[i] = s2[i + 1] + a[i];
for (int i = 1; i <= n; i ++ ) res = max(res, s1[i] / i);
for (int i = 1; i <= n; i ++ ) res = max(res, s2[i] / (n - i + 1));
printf("%.9lf", res);
return 0;
}