QOJ.ac

QOJ

Time Limit: 1.0 s Memory Limit: 512 MB Total points: 100

#13087. 圆盘排列

Statistics

$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

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.