Closed sakikuroe closed 2 months ago
1000 とした理由は何かありますか?特に理由がなければ 10^9 のほうが良いと思います
平面の座標で√付きの有理数が出てくる気がしていて、うまく大小比較できるのか分からなかったためです。 Static Convex Hull (3 dimensional) が $10^9$ とかで実装できるみたいなので大きい制約で良さそうです。
√付きの有理数が出てくる気がしていて、うまく大小比較できるのか分からなかったためです
これは $10^9$ を $10^3$ にしたところで同様の問題は残ってしまう気がしまうのですが、どうでしょうか。
実数ジャッジについては、少なくとも現状は導入できる見込みがないので、問い方を考えるか、気長に待っていただくかになると思います。
出力は整数なので良くて、内部で実数を使う時の精度を気にしているのだと思います。アルゴリズムを真面目に検討していないですが、整数範囲だけで書けるならそれでも良さそうです。
整数で誤差なしで解く想定であれば、一番微妙なのは、三角形の外心に相当する計算ですか? であれば有理数だけで、sqrt{} は出てこないような気がしています。 座標 10^9 だと分子分母が 10^{18} くらいで、128bit あれば比較できるかな。
必要な演算について、
Fortune の方法で √ 付きの有理数の大小比較(程度のヤバい比較)を避ける方法は分かりません(見つかりません)でした。そういう比較があるという言及があるスライド(最後のページ)はありました。
分割統治のほうは「点 D は △ABC の外接円の内部にあるか?」が一番難しくて、 Wikipedia に載っている行列式で計算できるようです。( $0 \leq x i,y i \leq X$ なら絶対値 $6 X^4$ 以下の 2 整数の大小比較で判定できる)
Problem ID: euclideanmst
docs/style.md によると euclidean_mst
です。
以下の制約にしようと考えています。準備で不都合があれば相談してください。
テストケース作りは、oupc2023 運営に頼めば、出題時に使った生成器をもらうことができるかもしれません。 ただし、あれ小数ジャッジだったから、誤差に厳しいケースとかは作られていない可能性があります。
作ります
Problem name: Euclidean MST Problem ID: euclideanmst
問題文
2次元平面上に $N$ 個の点が与えられる. $i$ 個目の頂点の座標は $(x_i,~y_i)$ である.
2点間の距離をユークリッド距離, つまり $\sqrt{(x_i - x_j)^{2} + (y_i - y_j)^{2}}$ で定義するときの, MSTを求めよ.
制約
解法
参考
入力
出力
解が複数存在する場合, どれを返しても構わない.
Note