小红拿宝箱
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

小红击杀了若干只怪物后,爆出了若干个宝箱。她准备取出一些宝箱的金币,但是,当小红取到了2个宝箱的金币后,其余宝箱就会消失。
现在小红每次可以随机打开一个宝箱查看内部的金币,然后小红可以选择拿或者不拿。但是,小红一共只有最多一次“不拿”的机会。当小红选择“不拿”以后,该宝箱会混入所有未抽取的宝箱。如果小红选择了“拿”,则获得该宝箱的金币,同时该宝箱消失。
现在小红想知道,自己若采用最优策略(即最大化最终获取金币的期望),可以得到金币数量的期望是多少?
请注意,小红在开箱之前,已经通过大预言术得知了每个箱子中的金币数量。只是由于箱子被打乱了,小红在打开之前,不知道具体那一个箱子有多少金币。

输入描述:

第一行输入一个正整数n,代表宝箱的总数。
第二行输入n个正整数a_i,代表每个宝箱的金币数量。
1\leq n \leq 10^5
1\leq a_i \leq 10^9

输出描述:

一个浮点数,代表小红可以拿到的金币数量的期望。如果你的答案和标准答案的相对误差不超过10^{-6},则认为你的答案正确。
示例1

输入

复制
3
2 3 3

输出

复制
5.611111111111

说明

小红第一次有1/3的概率打开第一个箱子,有2/3的概率打开后两个箱子中的一个。
如果小红第一次打开的是第一个箱子,她将选择“不拿”。此时小红没有了“不拿”的机会,因此三个箱子任意打开两个箱子,获得的金币总数的期望为16/3。
如果小红第一次打开的是后两个箱子中的一个,那么她将选择“拿”,首先获得了3金币;之后有以下两种情况:
①小红有1/2的概率打开第一个箱子,此时还有一次“不拿”的机会,因此小红会放弃此箱子,放弃后小红已经没有了“不拿”的机会,在剩余的两个箱子中任意打开一个箱子,金币的期望为5/2;
②小红有1/2的概率打开金币为3的箱子,显然直接拿金币结束。
最终小红的金币总数的期望为(16/3)*(1/3)+(3+(3+(5/2))/2)*(2/3)=16/9+46/12≈5.611111111111