/ 最近 .rdf 追記 編集 設定 本棚

脳log[20230405]



2023年04月05日 (水) [AtCoder] 精進。ABC296-G「Polygon and Points」(黄 diff)。やることはすぐにわかるんよ。頂点を1つ起点に選んで他の頂点を眺める。クエリで与えられた点がどの頂点と頂点のあいだにあるのかを二分探索で調べる。あとは見つけた隣接2頂点が張る辺と点の前後関係で答えが出る。しかしそれをきっちり誤りなく行うのが難しくて 6WA を重ねてしまった。■提出 #40344048 (AC / 707 Byte / 2244 ms)。冒頭に3つの関数がある。放射線内?直線上?外部?。1つ前の提出 #40337287 (WA×3) を見るとそれらは 線上?内部? だった。ちなみに2つ前の提出 #40336676 は WA×2 だからいじって逆に WA を1つ増やしている。その差分から直線と線分の区別があいまいだったことに気が付いたし、その他の原因は便宜上の三角形を用いた内/外/境界線上判定が解答の IN/OUT/ON と1対1対応してはいないこと(三角形の辺が多角形の輪郭線と一致している場合と一致していない場合で分かれる)と、道具に選んだ Complex(複素数) の取り扱い方が不確かだったことだった。1点を原点に選んであれやこれやする、1辺を基準に選んであれやこれやする、というので迷走したし、原点に選んだ1点と (0,0) の区別を間違えたりもした。外積って (a.conj*b).imag で求まるんだなーというのも今回の発見。ただただ幾何判定への正確な理解と正確に実装する力がなかった。■あ、線上?直線上? に改名したときに絶対値の比較をやめるべきだった。まーだ、実装に間違いがある。あと細かい話だけど、内部?not 外部? で置き換えたのは、内部と線上を区別しないように書き換えた 内部もしくは線上? 関数より 外部? 関数の方が(問題から離れて)単体で見たときに有用だと思ったからなんだけど、だったら 放射線内?(線上を含んでいる) も not 放射線外? として用意すべきだった。不徹底。■ローカルでランダムテストケースを作ろうとすると狭義凸多角形の部分で困るよね。±10 の XY 平面に三角形か四角形をテキトーに拡大して配置して全格子点 441 個をクエリにしてテストした。■CP(外積)、上方?下方?線上? の語彙を使って整理した。提出 #40350677 (AC / 606 Byte / 2254 ms)。a.conj*b って内積も外積も求まるのんな。たぶん複素数って一般性が足りないと思うんだけど(自分は不足を感じられるほど先を知らないけど)、おかげで目的に合致しているとすごく扱いやすいと思う。と、その扱いにすら難儀していた者が申しております。■『デモクリトスと量子計算』(スコット アーロンソン)という本を読んでいたら文字を目でなぞっていたら「代数的に閉じている」という言い回しを見かけたけども、複素数の位置づけの実際のところってどうなんでしょうね。