以下の問いを考えるときの方針をアドバイスいただきたいです。
XY平面上の(0, 0), (n, 0), (0, m), (n, m) に囲まれる領域およびその線上の格子点を考えます。
領域内にX軸に平行な線分がランダムな長さでランダムにあります。
x = k にかかる線分の数cを数えたときにc >= qとなる線分(点の場合は[p, p])の集合を出力したいです。
言葉だけですと伝わりにくいと思いますので画像を参考になさってみてください。
簡単に思いついたのは以下の流れです。
・結果配列を用意
・n = k のときを考える
・線分の集合をすべて捜索し、q以上であればtrue, 未満ならfalseとする
・k - 1のときtrue, kのときtrue ならスキップ
・k - 1のときfalse, kのときfalse ならスキップ
・k - 1のときtrue, kのときfalse なら結果配列にk - 1を
・k - 1のときfalse, kのときtrue なら結果配列にkを追加
・n + 1回分行う
・結果配列から2個ずつ取り出す
ただ、これですとn x m x 線分集合分を探索しなくてはならず
n, mが大きくなった時にパフォーマンスが悪そうです。
より良い方針はありますでしょうか。
以下は例です。
領域:(n, m) = (3, 9)
線分の集合
[[0, 0], [0, 3]]
[[0, 8], [0, 9]]
[[0, 1], [4, 1]]
[[6, 1], [7, 1]]
[[1, 3], [3, 3]]
q = 1のとき [0, 4], [6, 9]
q = 2のとき [0, 3]
q = 3のとき [1, 2]
回答1件
あなたの回答
tips
プレビュー