E - 雲と影 解説
by
maspy
太陽の座標を無限大と見なせば,入力される点の座標を \((x_i,y_i)\) としたとき,
- 多角形1:\(i\) 番目の頂点の座標が \((x_i+H,y_i+H)\) であるような多角形
- 多角形2:\(i\) 番目の頂点の座標が \((x_i-H,y_i-H)\) であるような多角形
として,これらの和集合の面積を求める問題です.
和集合の面積は,面積の和から共通部分の面積を引くという形で計算できるので,共通部分の面積を求めればよいです.
私は三角形分割して,三角形同士の共通部分の面積をすべて足すという方法をとりました.他の提出を見ていると,三角形分割は重み \(-1\) の三角形を含めても適切に扱えて実装が簡潔になるようです.
許容誤差が与えられているのではなく,四捨五入小数を完全一致出力するという問題です. 入力座標は \(100\) 倍すると整数として扱えますが,共通部分の面積には直線の交点の計算が登場するので,有理数型登場または適当な小数型登場ということになると思います.
いずれにせよ,答がぴったり半整数になる場合の処理に注意する必要があります.
なんと,答が半整数の場合を切り上げると,3 ケースで WA すると思います.
太陽の座標は無限大ではなく,超巨大な実数であることを思い出せば,「多角形1」「多角形2」はもとの多角形がわずかに縮小されています.
したがって,言い換え後問題を解いた場合の答がぴったり半整数である場合には,答を切り捨てて出力することが必要になります.
投稿日時:
最終更新: