ヘリリンは二次元平面上における長さ2Lの線分の形状をしている。ヘリリンのまわりには、線分の形状をしたいくつかの障害物が存在している。
ヘリリンは障害物に接すると体力が削られてしまう。完璧主義のヘリリンは無傷でゴールすることにした。
ヘリリンは以下の行動ができる。
平行移動
ヘリリンを表す線分の中点を中心として、反時計周りにちょうど 180/r 度だけ回転する
ただし、二次元平面は上方向にy軸をとる。
ヘリリンのまわりに、2 点 S, G がある。始めはヘリリンの中心は点 S にあって、x軸に平行な状態になっている。
ヘリリンは、平行移動するのは得意だが、回転するのは不得意である。あなたの仕事は、ヘリリンが中心を点 S から点 G まで移動させるまでに必要な、最小の回転行動の回数を求めることである。移動させることができない場合は、そのことも検出せよ。
ただし、以下のことに注意せよ。
ヘリリンは移動しながら回転することはできない。
ヘリリンが回転する途中で障害物にぶつかりうる場合は、回転することはできない。
障害物が互いに交差していることはあり得る。
線分は十分小さい有限の太さを持つものとして扱う。最後のサンプルを見よ。
入力は以下の形式で与えられる。
L r
s_x s_y
g_x g_y
n
x_11 y_11 x_12 y_12
...
x_n1 y_n1 x_n2 y_n2
Lはヘリリンの半分の長さを表す。 rは回転角度を定めるものである。 (s_x,s_y)は点 S、(g_x,g_y)は点 G の座標である。 nは障害物の数を表す。 (x_i1,y_i1)と(x_i2,y_i2)はi番目の障害物を表す線分の端点である。
スタート地点からゴール地点まで移動するために必要な最小の回転行動の回数を1行に出力せよ。 移動させることができない場合は、-1を1行に出力せよ。
入力は以下の制約を満たす。
1≤n≤30
2≤r≤11
1≤L≤105
入力に含まれる座標の各成分は絶対値が105以下
入力に含まれる数値はすべて整数
i=1,...,nについて(x_i1,y_i1)=(x_i2,y_i2)
ヘリリンをスタート地点にx軸に水平な状態で配置したとき、障害物との(線分と線分との)距離は10−3より大きい
障害物を表す線分の端点を、両方向に10−3だけ延ばしても縮めても解は変わらない
Lを 10−3だけ増減させても解は変わらない
障害物の線分をl_iと書くことにすると、1≤i≤j≤nであって、l_iとl_jの距離が2L以下であるような組(i,j)は高々100個
ゴール地点は障害物に乗っていることはない