G - Convex Hull of Intersections Editorial /

Time Limit: 2 sec / Memory Limit: 1024 MiB

配点 : 100

問題文

xy 平面上に相異なる N 本の直線があり、 i 番目の直線 \ell_ia_i x + b_i y + c_i = 0 の形で表されます。 これらの直線群の交点全体の集合を P とします。より厳密には次の通りです。

P = \{ p \in \mathbb{R}^2 \mid \exists i, j \in \{1, 2, \ldots, N\} \, \text{ s.t. } \, p \in \ell_i, \, p \in \ell_j, \, i \neq j \}

このとき、 P の凸包の面積を求めてください。ただし、凸包が空集合、1 点集合または線分である場合、その面積は 0 とします。

凸包の定義
有限集合 S = \{ x_1, \ldots, x_{|S|} \} の凸包 \text{conv}(S) を次で定めます。

\displaystyle \text{conv}(S) = \left\{ \sum_{i=1}^{|S|} \alpha_i x_i \, \middle\vert \, \sum_{i=1}^{|S|} \alpha_i = 1, \, 0 \leq \alpha_i \leq 1 \right\}

T 個のテストケースが与えられるので、それぞれについて答えを求めてください。

制約

  • 1 \leq T
  • 2 \leq N \leq {10}^4
  • |a_i|, |b_i|, |c_i| \leq {10}^3
  • a_i \neq 0 または b_i \neq 0
  • 直線 \ell_i\ell_j は異なる (i \neq j)
  • 1 つの入力ファイルに含まれる N の総和は 2 \times {10}^5 以下
  • 入力はすべて整数

入力

入力は以下の形式で標準入力から与えられる。

T
\text{case}_1
\text{case}_2
\vdots
\text{case}_T

ここで \text{case}_ii 番目のテストケースを表し、各テストケースは以下の形式で与えられる。

N
a_1 b_1 c_1
a_2 b_2 c_2
\vdots
a_N b_N c_N

出力

T 行出力せよ。i 行目には i 番目のテストケースの答えを出力せよ。

真の解との絶対誤差または相対誤差が {10}^{-5} 以下のとき正解と判定される。


入力例 1

3
4
1 -1 -2
3 3 -6
-1 2 -4
1 2 4
3
3 0 5
5 0 18
1 0 7
3
314 159 -1
313 158 -1000
315 160 999

出力例 1

72.0
0
0.0016129032

1 つ目のテストケースでは、 P の凸包は (8, 6), (-4, 0), (8, -6) をこの順に結ぶ三角形であり、その面積は 72 です。

2 つ目のテストケースでは、 3 つの直線は全て平行なため P = \emptyset です。 したがって、 P の凸包の面積は 0 です。