传送门 思路:让求操作之后平均数的最大值,可以维护一个最大值,每次比较让求的平均数。最后输出最大的即可。
using namespace std;
const int maxn = 100000 + 10;
double a[maxn];
int main()
{
ll n,k,m;//ans1,ans;
cin>>n>>k>>m;//n是元素个数,k是单个元素可用,m是总的/
double sum=0;
double maxx,ans1,ans;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
sort(a+1,a+n+1);//排序每次减最小
ans1=(sum+min(n*k,m))/n;
for(int i=0;i<n&&i<=m,i++)
{
sum-=a[i];
ans=(sum+min(k*(n-i),(m-i)))/(n-i);
ans1=max(ans1,ans);
}
printf("%.20lf\n",(double)(ans1));
return 0;
}