Water Balance
从头开始直接模拟即可,将这 n 个数分成很多个模块,如果发现一个模块可以降低前面一个模块的平均数,则跟前面一个模块合并,以此类推。
// Created by CAD on 2020/2/10.
#include <bits/stdc++.h>
#define fi first
#define se second
#define pdi pair<double,int>
using namespace std;
const int maxn=1e6+5;
int a[maxn];
pdi bj[maxn];
int main()
{
int n; scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
int cnt=0,len=0;
double sum;
for(int i=1;i<=n;++i){
len=1,sum=a[i];
while(cnt&&sum/len<=bj[cnt].fi)
len+=bj[cnt].se,sum+=bj[cnt].fi*bj[cnt].se,cnt--;
bj[++cnt]={sum/len,len};
}
for(int i=1;i<=cnt;++i){
for(int j=1;j<=bj[i].se;++j)
printf("%.9f\n",bj[i].fi);
}
return 0;
}
CAD加油!欢迎跟我一起讨论学习算法,QQ:1401650042