昨夜我看見你奔跑
在恩典的遼闊田野中
你不再破碎,也不再痛苦[^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
說明
下圖為輸入的線段,注意線段可以相交:
圖 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}$。
說明如下圖:
圖 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$。保證兩個端點不重合,不同的線段不會涉及到相同的點。保證任意三點不共線。