ヘリリンは二次元平面上における長さ2Lの線分の形状をしている。
ヘリリンのまわりには、線分の形状をしたいくつかの障害物が存在している。
ヘリリンは障害物に接すると体力が削られてしまう。
完璧主義のヘリリンは無傷でゴールすることにした。
ヘリリンは以下の行動ができる。
ただし、二次元平面は上方向にy軸をとる。
ヘリリンのまわりに、2 点 S, G がある。
始めはヘリリンの中心は点 S にあって、x軸に平行な状態になっている。
ヘリリンは、平行移動するのは得意だが、回転するのは不得意である。
あなたの仕事は、ヘリリンが中心を点 S から点 G まで移動させるまでに必要な、最小の回転行動の回数を求めることである。
移動させることができない場合は、そのことも検出せよ。
ただし、以下のことに注意せよ。
入力は以下の形式で与えられる。
L r
sx sy
gx gy
n
x11 y11 x12 y12
...
xn1 yn1 xn2 yn2
Lはヘリリンの半分の長さを表す。 rは回転角度を定めるものである。 (sx, sy)は点 S、(gx, gy)は点 G の座標である。 nは障害物の数を表す。 (xi1, yi1)と(xi2, yi2)はi番目の障害物を表す線分の端点である。
入力は以下の制約を満たす。
スタート地点からゴール地点まで移動するために必要な最小の回転行動の回数を1行に出力せよ。 移動させることができない場合は、-1を1行に出力せよ。
1 2 3 3 2 -1 4 1 0 1 5 0 1 4 1 0 4 6 4 5 0 5 5
1
1 2 3 3 2 -1 4 1 0 1 5 0 1 6 1 0 4 6 4 5 0 5 5
-1
1 4 3 3 7 0 5 1 0 1 5 0 1 6 1 0 4 6 4 8 0 2 5 6 0 4 2
3
2 2 4 2 4 5 5 1 5 2 0 0 4 3 4 0 1 8 1 7 0 7 5 8 4 5 4
-1