#CF2038E. 水桶
水桶
E. 水桶
每次测试的时间限制:2 秒
每次测试的内存限制:512 兆字节
假设你有一排 个水桶,编号从 到 。
所有水桶都是相同的,底面积为 个单位,因此桶内水的体积等于水柱的高度。初始时,第 个桶内有 个单位的水。
相邻的水桶通过管道连接。也就是说,对于每个 从 到 ,桶 和桶 之间有一根位于高度 的水平管道。管道的宽度可以忽略不计。这些管道允许水在桶之间流动。

现在你想玩这些桶。你的计划是通过向桶内扔粘土来最大化第一个桶中的水的体积。
在一次操作中,你可以选择任意一个桶,并向其中扔进一个单位的粘土。一个单位的粘土体积与一个单位的水相同。粘土比水重,并且不溶于水,因此它会沉到桶底,均匀分布。
粘土具有粘性结构,因此如果粘土柱足够高,它会封闭管道。更正式地说,假设管道位于高度 。如果粘土柱的高度等于或低于 ,则管道可以工作。但一旦你向桶中加入更多的粘土,管道就会瞬间封闭,阻止水在桶之间流动。
你有大量的粘土,因此可以无限次重复上述操作。然而,在每次操作之间,你必须等待水达到新的平衡。
你能收集到第一个桶中的最大水体积是多少?
假设桶足够高,水不会溢出,且管道宽度可忽略不计。
输入
第一行包含一个整数 ()—— 水桶的数量。
第二行包含 个整数 (),其中 是第 个桶中初始的水体积。
第三行包含 个整数 (),其中 是第 个桶与第 个桶之间管道的高度。
输入的附加约束:给出的初始水高度处于平衡状态。
输出
打印一个数字 —— 第一个桶中水的最大体积。如果绝对误差或相对误差不超过 ,则认为你的答案正确。
形式化地说,设你的答案为 ,标准答案为 。当且仅当 时,你的答案被接受。
示例
示例 1
输入
2
1 2
2
输出
2.500000000000000
示例 2
输入
3
3 0 0
6 9
输出
3.000000000000000
示例 3
输入
5
10 0 0 0 5
11 1 2 5
输出
11.916666666666667
注释
第一个示例的最优策略如下图所示。
