Document

Problem D
the Phantom
解説:菅原 悠
概要

鏡を使って、お化けを驚かせよう!
概要

鏡を二枚使って、お化けをより驚かせよう!
概要

平らな鏡を二枚置いたとき、見える像の数を
答えなさい。
解法

像の現れる場所を計算
• 2次元図形での反射の計算方法
• 角度を使ってがんばる
• 射影ベクトルでがんばる
• 複素平面の複素共役を取る
解法

像と初期位置とを結ぶ直線上に、鏡が正しい
順で配置されることを確認
• 鏡の中の鏡の位置を計算
• 交差判定
解法

鏡は二枚
• 反射後の世界にはもう一方の鏡しかいない
反射は鏡A→B→A→B→A→…だけ
 鏡の中にはもう一方の鏡しかいない

• 遮蔽ははじめの一枚だけしかない
鏡
虚像 鏡
おばけ
例 #17
鏡
虚像
例 #18
見えない
見えないからといって、
探索を打ち切ってはい
けない.
像
例 #19
同じ配置でも
立ち位置しだいで
見える像の数は大
きく異なります
解法

1.Ad hoc に n回見えなかったら打ち切り
• 危険な例:Test caseに n=1000で
突破できないものが存在(後述)

2.図形的に見えないことが確定したら
打ち切り
系の考察

α
複素平面で考える。
0
• M1(z) = conj(z)
• M2(z) = α conj(z/α)
= α/conj(α) conj(z)
1

M1・M2(z) = α/conj(α) z
→ zを2arg(α)回転

鏡の交点を中心に回転した位置に像が出る
系の考察(cont)

反射を先に進むと一方向に曲がっていく

→視線が途中の像を通らなくなったら打切
: もう戻ってくることはないので

→視線がもう一方の鏡で遮蔽されたら打切
例 #15
境界例
ここに像
例 #116
以下ランダムデータ
像が
出ず
見えないからといって
打ち切る勿れ
例 #78
二枚の鏡の外側から襲撃
像
像
像
像
例 #56
この辺に見えなかった像が1000以上も!!
例 #34
手入力の難関例
難関例の作り方
初期配置
難関例の作り方
拡大
傾き(21, 20)
傾き(20, 19)
難関例の結果
ここに像が15個
出典

オリジナル
原題 : Mirrors against each other
 原作 : 三廻部
 改題、入力生成 : 菅原
 被害者 : 野田、稲葉
 可視化 : gnuplot 4.0

結果
1st submitted :

kitsune
たぶん見えなくなったらあきらめていた


Accepted / submit : 0/2