QOJ.ac

QOJ

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

#4474. 田野

Statistics

昨夜我看見你奔跑

在恩典的遼闊田野中

你不再破碎,也不再痛苦[^1]

你找到了一片一望無際的大田野,在這片田野中你忘記了曾經破碎、痛苦的過去。你像小孩一樣在上帝的恩賜中奔跑。

然而你發現了一個問題,在這片田野中有若干條峽谷。你隨時都有墜入峽谷中的危險。為了繼續自由自在地奔跑,你決定用若干圍欄將這些峽谷圍起來。

我們可以忽視峽谷的寬度,將每一條峽谷看作一條線段。這些線段可以相交,而你的圍欄必須是一條或多條閉合、不自交且兩兩不相交的曲線,使得任何一個峽谷都完全在某一條閉合曲線圍成的閉合區域之內。

當然,圍欄需要消耗資源,消耗的資源和圍欄的長度成正比,你希望最小化消耗的資源總量,所以你希望求出圍欄總長度的下確界,換句話說,你希望找到一個最大的實數 $x$,使得不存在一個方案使得圍欄總長度小於 $x$。

[^1]: 題目敘述中的歌詞來自 Jackie Evancho 的 Open Fields of Grace,作曲者為 Lisa Venkatrathnam 和 Paul Sumares。

輸入格式

從檔案 fields.in 中讀入資料。

輸入檔案的第一行為一個整數 $n$,表示峽谷的個數。

接下來 $n$ 行,第 $i$ 行四個整數 $a_i,b_i,c_i,d_i$,表示第 $i$ 條峽谷為一條連接點 $(a_i,b_i)$ 和點 $(c_i,d_i)$ 的線段。保證兩個端點不重合,不同的線段不會涉及到相同的點。保證任意三點不共線。

輸出格式

輸出到檔案 fields.out 中。

輸出一行一個實數,表示圍欄總長度的下確界。你的答案和標準答案的絕對誤差與相對誤差的最小值不能超過 $10^{-6}$。

範例

輸入格式 1

1
0 0 0 1

輸出格式 1

2.00000000

說明

一個四個端點分別為 $(-0.01,-0.01),(-0.01,1.01),(0.01,1.01),(0.01,-0.01)$ 的長方形完全包含輸入的線段,且總長度為 $2.08$,略大於下確界。

我們可以證明,不存在長度恰好為 $2$ 的方案。我們可以透過將正方形無限向輸入線段「縮緊」來構造一個長度為任意大於 $2$ 的方案。

輸入格式 2

4
-1 7 0 7
0 0 0 1
2 -3 5 5
2 2 6 -1

輸出格式 2

23.563573998194637061425470524757

說明

下圖為輸入的線段,注意線段可以相交:

problem_4474_d68bb3feeab6ab474726a079de59f570.png

圖 1:範例 2 說明

我們可以透過無限「逼近」這些紅色的曲線來構造任意總長度大於答案的方案。注意透過範例 1,我們很容易知道左上角的紅色線段被算了兩遍。

輸入格式 3

4
-1 1 -1 3
0 4 2 4
3 1 3 3
0 0 2 0

輸出格式 3

13.656854249492380195206754896839

說明

答案為 $8+4\sqrt{2}$。

說明如下圖:

problem_4474_2c074e3b8cf36918cef7379be2e5436f.png

圖 2:範例 3 說明

我們可以透過無限「逼近」這些紅色的曲線來構造任意總長度大於 $8+4\sqrt{2}$ 的方案。

範例 4

見選手目錄下的 fields/fields4.in 與 fields/fields4.ans。

資料範圍

對於 $5\%$ 的資料,保證 $1\le n\le 1$。

對於 $10\%$ 的資料,保證 $1\le n\le 2$。

對於 $15\%$ 的資料,保證 $1\le n\le 10$。

對於 $30\%$ 的資料,保證 $1\le n\le 15$。

對於 $45\%$ 的資料,保證 $1\le n\le 30$。

對於 $55\%$ 的資料,保證 $1\le n\le 60$。

對於 $65\%$ 的資料,保證 $1\le n\le 120$。

對於 $75\%$ 的資料,保證 $1\le n\le 200$。

對於另外 $10\%$ 的資料,保證答案最多包含兩條曲線。

對於 $100\%$ 的資料,保證 $1\le n\le 250$,$0\le |a_i|,|b_i|,|c_i|,|d_i|\le 10^9$。保證兩個端點不重合,不同的線段不會涉及到相同的點。保證任意三點不共線。

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.