C - 光の反射 (Reflection of Light) 解説 /

実行時間制限: 2 sec / メモリ制限: 1024 MB

配点: 700

問題文

2 次元平面上に、原点 (0, 0) を中心とする半径 1 の円形の部屋があります。
その内部に、点 (X, Y) を中心とする半径 R の円形の柱が建てられています。

DISCO 君は、光源を部屋の内部であって柱の外部であるような点 (S_X, S_Y) に設置しました。
この点から、光がすべての方向に一直線に進みます。
光は、部屋の外周または柱に当たると反射されずに吸収されます。

彼は、部屋の外周上のうちどのくらいの割合の部分に、一定の個数以内の鏡を使って光を届けられるのかを知りたくなりました。
t = 0, 1, 2, ..., K のそれぞれに対し、以下の質問に答えてください。

  • 鏡を使うことで、光が進む方向を t 回まで自由に変えることができるとしたときに、光が到達しうる部屋の外周上のすべての点を白く塗る。
    このとき、部屋の外周上の白く塗られた部分の割合を求めよ。(すなわち、部屋の外周上の白く塗られた部分の長さを l として l / 2π を求めよ。)

制約

  • |X|, |Y|, |S_X|, |S_Y| < 1
  • 0.01 \leq R < 1
  • 1 \leq K \leq 10
  • 柱は部屋の内部にあり、柱から部屋の外周までの距離は 0.05 以上である
  • 光源は部屋の内部にあり、光源から部屋の外周までの距離は 0.01 以上である
  • 光源は柱の外部にあり、光源から柱までの距離は 0.01 以上である
  • X, Y, R, S_X, S_Y の値は最大で小数点以下 7 桁まで与えられる
  • K は整数

入力

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

X Y R
S_X S_Y
K

出力

K + 1 行出力せよ。i 行目 (1 \leq i \leq K + 1) に t = i - 1 のときの質問に対する答えを出力すること。
すべての質問について、ジャッジの出力との絶対誤差が 10^{-4} 以下ならば正解となる。


入力例 1

0.0 0.0 0.6
0.0 0.7
2

出力例 1

0.467404563822388
1
1

t = 0 のとき、部屋の外周上の光が到達しうる範囲は点 (0.99476..., 0.10222...) と点 (-0.99476..., 0.10222...) を結ぶ長さ 2.93678... の円弧で、この長さが外周全体に占める割合は 2.93678... / 2π = 0.46740... です。

t = 1 のとき、光の方向を適切に変えることで、t = 0 のときに到達できなかったすべての点に光を到達させることができます。


入力例 2

0.3 0.3 0.4
0.9 0.0
1

出力例 2

0.623158068351223
1

入力例 3

0.00 0.00 0.90
0.65 0.65
3

出力例 3

0.208804270061789
0.495936856319201
0.783069442576613
1

入力例 4

-0.2018 -0.1190 0.6858
-0.5000 -0.7777
3

出力例 4

0.266193331431572
0.767297626518897
1
1