$n$ 个圆盘被放置在一个平面上,使得它们从上方接触 $x$ 轴,且任意两个圆盘互不重叠。在一种合法的放置方式中,每个圆盘在其最低点处接触 $x$ 轴。该最低点被称为圆盘的“底点”。这些底点在圆盘上诱导出一个从左到右的线性顺序。
我们将关注一个线性实例。线性实例是一组圆盘 $\{D_1, D_2, \dots, D_n\}$,使得对于圆盘的任意排序 $\sigma: \{1, 2, \dots, n\} \to \{1, 2, \dots, n\}$(即 $D_{\sigma(1)}, D_{\sigma(2)}, \dots, D_{\sigma(n)}$),都存在一种放置方式,使得每个圆盘 $D_{\sigma(i)}$ 仅与 $D_{\sigma(i-1)}$ 和 $D_{\sigma(i+1)}$ 相切($D_{\sigma(1)}$ 和 $D_{\sigma(n)}$ 除外),且 $D_{\sigma(1)}$ 和 $D_{\sigma(n)}$ 分别仅与 $D_{\sigma(2)}$ 和 $D_{\sigma(n-1)}$ 相切。参见图 C.1。图 C.2 展示了一个非线性实例的例子。
图 C.1 与 图 C.2
已知如果圆盘的最大半径与最小半径之比小于 4,则这些圆盘构成线性实例。因此,本题的所有输入均满足此条件。
对于给定的圆盘线性实例,求出一种合法的放置方式,以最小化圆盘最左侧点与最右侧点之间的水平距离。参见图 C.3。
图 C.3
输入格式
程序应从标准输入读取数据。输入的第一行包含一个整数 $n$ ($1 \le n \le 1,000$),表示圆盘的数量。下一行包含 $n$ 个整数,每个整数表示一个圆盘的半径 $a$ ($1 \le a \le 1,000,000$)。注意,圆盘的最大半径与最小半径之比小于 4。
输出格式
程序应向标准输出写入数据。输出仅一行,包含一个实数 $z$,表示在任何合法放置方式下,圆盘最左侧点与最右侧点之间的最小水平距离 $OPT$。输出 $z$ 应包含整数部分、小数点和小数部分,并满足 $OPT - 10^{-5} < z < OPT + 10^{-5}$ 的条件。
样例
样例输入 1
4 4 2 7 6
样例输出 1
34.99452
样例输入 2
5 13 7 4 15 10
样例输出 2
90.14124