AT_kupc2015_k SOULBLOCK
Description
[problemUrl]: https://atcoder.jp/contests/kupc2015/tasks/kupc2015_k
あなたは以下のようなゲームを作成した.
- ゲームフィールドは二次元平面とみなすことができる.プレーヤーは原点に存在する点であり,フィールド上には円形のオブジェクトがいくつか存在する.
- それぞれのオブジェクトには価値が決められている.
- オブジェクトは別の物体に衝突されるまで止まったままである.
- プレーヤーはゲーム開始時に,好きな方向を一度だけ選ぶ.すると,プレーヤーは選んだ方向に直進し続ける.
- プレーヤーが止まっているオブジェクトにぶつかった時,オブジェクトはプレーヤーと衝突した箇所でくっつき,以降はプレーヤーと同じ方向に動く.
- 動いているオブジェクトが止まっているオブジェクトにぶつかった時,オブジェクト同士は衝突した箇所でくっつき,以降はプレーヤーと同じ方向に動く.
- 最終的に,プレーヤーと(直接的、あるいは間接的に)つながっているオブジェクトの価値の総和がプレーヤーのスコアとなる.
あなたはこのゲームを公開していたが、悪意のあるプレーヤーによって改造されてしまい,でたらめな方向にプレーヤーを発射するようになってしまった.
プレーヤーが一様にランダムな方向に飛び出すと仮定した時,プレーヤーが獲得するスコアの期待値を出力せよ.
Input Format
入力は以下の形式で与えられる.
> $ N $ $ X_1 $ $ Y_1 $ $ R_1 $ $ W_1 $ : $ X_N $ $ Y_N $ $ R_N $ $ W_N $
- $ 1 $ 行目にオブジェクトの数を表す整数 $ N $ ( $ 1\ \leq\ N\ \leq\ 2000 $ ) が与えられる.
- 続く $ N $ 行にオブジェクトの中心座標を表す整数 $ X_i,\ Y_i $ ( $ -10^4\ \leq\ X_i,\ Y_i\ \leq\ 10^4 $ ) , 半径を表す整数 $ R_i $ ( $ 1\ \leq\ R_i\ \leq\ 10^4 $ ), 価値を表す整数 $ W_i $ ( $ 1\ \leq\ W_i\ \leq\ 10^4 $ ) が与えられる.
- ゲーム開始時にはプレーヤーはどのオブジェクトの内部または境界上にも存在しないことが保証される.
- ゲーム開始時には異なる $ 2 $ つのオブジェクトは交差せず,接してもいないことが保証される.
Output Format
プレーヤーのスコアの期待値を $ 1 $ 行に出力せよ.
小数点以下何桁でも出力して構わないが,絶対誤差または相対誤差が $ 10^{-6} $ 未満になっていなければならない.
Explanation/Hint
### 部分点
以下の制約を満たすデータセットに全て正解した場合は $ 30 $ 点の部分点が与えられる.
- $ N\ \leq\ 100 $