#icpc2013summerday3k. [icpc2013summer_day3_k]くるくるくるりん
[icpc2013summer_day3_k]くるくるくるりん
ヘリリンは二次元平面上における長さの線分の形状をしている。
ヘリリンのまわりには、線分の形状をしたいくつかの障害物が存在している。
ヘリリンは障害物に接すると体力が削られてしまう。
完璧主義のヘリリンは無傷でゴールすることにした。
ヘリリンは以下の行動ができる。
-
平行移動
-
ヘリリンを表す線分の中点を中心として、反時計周りにちょうど 度だけ回転する
ただし、二次元平面は上方向に軸をとる。
ヘリリンのまわりに、2 点 S, G がある。
始めはヘリリンの中心は点 S にあって、軸に平行な状態になっている。
ヘリリンは、平行移動するのは得意だが、回転するのは不得意である。
あなたの仕事は、ヘリリンが中心を点 S から点 G まで移動させるまでに必要な、最小の回転行動の回数を求めることである。
移動させることができない場合は、そのことも検出せよ。
ただし、以下のことに注意せよ。
-
ヘリリンは移動しながら回転することはできない。
-
ヘリリンが回転する途中で障害物にぶつかりうる場合は、回転することはできない。
-
障害物が互いに交差していることはあり得る。
-
線分は十分小さい有限の太さを持つものとして扱う。最後のサンプルを見よ。
Input
入力は以下の形式で与えられる。
...
はヘリリンの半分の長さを表す。 は回転角度を定めるものである。 は点 S、は点 G の座標である。 は障害物の数を表す。 とは番目の障害物を表す線分の端点である。
Constraints
入力は以下の制約を満たす。
-
-
-
-
入力に含まれる座標の各成分は絶対値が以下
-
入力に含まれる数値はすべて整数
-
について
-
ヘリリンをスタート地点にx軸に水平な状態で配置したとき、障害物との(線分と線分との)距離は より大きい
-
障害物を表す線分の端点を、両方向に だけ延ばしても縮めても解は変わらない
-
を だけ増減させても解は変わらない
-
障害物の線分をと書くことにすると、であって、との距離が以下であるような組は高々100個
-
ゴール地点は障害物に乗っていることはない
Output
スタート地点からゴール地点まで移動するために必要な最小の回転行動の回数を1行に出力せよ。 移動させることができない場合は、-1を1行に出力せよ。
Sample Input 1
1 2
3 3
2 -1
4
1 0 1 5
0 1 4 1
0 4 6 4
5 0 5 5
Output for the Sample Input 1
1
- ヘリリンを90度回転させることで、隙間を抜けることができる。
Sample Input 2
1 2
3 3
2 -1
4
1 0 1 5
0 1 6 1
0 4 6 4
5 0 5 5
Output for the Sample Input 2
-1
- ヘリリンは完全に囲まれているので、ゴールまで移動することができない。
Sample Input 3
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
Output for the Sample Input 3
3
- 斜めの経路を通るためには、3回反時計周りに回転しなければならない。
Sample Input 4
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
Output for the Sample Input 4
-1
- ヘリリンは障害物にぴったり接することができないので、隙間のところで回転してゴールまで移動することはできない。