Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

幾何コンテスト2013

2,116 views

Published on

  • Be the first to comment

幾何コンテスト2013

  1. 1. 幾何コン2013 @not_522 @pepsin_amylase
  2. 2. Problem  A 役⼈人 原案 :  @not_̲522 テスト :  @not_̲522,  @pepsin_̲amylase 解説 :  @pepsin_̲amylase 2013年 6月 30日 幾何コンテスト  2013
  3. 3. 問題概要 •  xy平⾯面上に300頂点が与えられる •  任意の3点は同⼀一直線上にない •  共有点を持たないように出来るだけ多くの 三⾓角形を作れ 2013年 6月 30日 幾何コンテスト  2013
  4. 4. 問題概要 •  xy平⾯面上に300頂点が与えられる •  任意の3点は同⼀一直線上にない •  共有点を持たないように出来るだけ多くの 三⾓角形を作れ •  この制約が重要な役割を果たします 2013年 6月 30日 幾何コンテスト  2013
  5. 5. 解法1 •  x 座標でソートし⼩小さい順に三⾓角形を作る •  x 座標が同じ点は2個以下なのでうまくいき ます 2013年 6月 30日 幾何コンテスト  2013
  6. 6. 解法1  動作の様⼦子 2013年 6月 30日 幾何コンテスト  2013
  7. 7. 解法1  動作の様⼦子 2013年 6月 30日 幾何コンテスト  2013
  8. 8. 解法1  動作の様⼦子 2013年 6月 30日 幾何コンテスト  2013
  9. 9. 解法2 •  頂点の凸包を取り、そこから辺を⼀一つ選ぶ •  凸包を取ると頂点が辺の⽚片側に寄る •  辺のどちらかの頂点を原点にとり、各頂点 の偏⾓角を考える •  偏⾓角が⼀一番⼩小さい頂点とはじめに選んだ辺 で三⾓角形を作る •  これを100回繰り返す 2013年 6月 30日 幾何コンテスト  2013
  10. 10. 解法2  動作の様⼦子 2013年 6月 30日 幾何コンテスト  2013
  11. 11. 解法2  動作の様⼦子 この点からの偏⾓角を考える 2013年 6月 30日 幾何コンテスト  2013
  12. 12. 解法2  動作の様⼦子 3頂点が同⼀一直線上にないので、 最⼩小偏⾓角の頂点はただひとつに決まる これが最⼩小偏⾓角の頂点 2013年 6月 30日 幾何コンテスト  2013
  13. 13. 解法2  動作の様⼦子 2013年 6月 30日 幾何コンテスト  2013
  14. 14. 回答状況 満点の⼈人数:88⼈人 最初に正の得点を得た提出 •  evima(1分21秒, 1点) 最初に満点を得た提出 •  semiexp(3分41秒) 2013年 6月 30日 幾何コンテスト  2013
  15. 15. Problem  B ⽟玉座の間 原案 :  @not_̲522 テスト :  @not_̲522,  @pepsin_̲amylase 解説 :  @pepsin_̲amylase 2013年 6月 30日 幾何コンテスト  2013
  16. 16. 問題概要 •  xy平⾯面上にn頂点が与えられる •  y軸に関して線対称になるように点を動かし たい •  移動先は重複していてもよい •  移動距離離の総和を最⼩小化せよ 2013年 6月 30日 幾何コンテスト  2013
  17. 17. 部分点 •  (1) 50点 :n = 1 •  (2) 50点 :n ≦ 10 •  (3) 50点 :n ≦ 20 •  (4) 50点 :n ≦ 100 2013年 6月 30日 幾何コンテスト  2013
  18. 18. 解法1(50点) •  1頂点の場合はy軸に移動させるしかない •  x座標の絶対値が答え 2013年 6月 30日 幾何コンテスト  2013
  19. 19. 解法2(100点) •  対応させるペアの組み合わせをすべて試す •  n! / 2(n/2) ≦ 113400通り 2013年 6月 30日 幾何コンテスト  2013
  20. 20. 2頂点の組を対称にする •  各ペアを対称にするのに必要な移動距離離 •  = ペアの⽚片⽅方をy軸反転させたあとで2点 を⼀一致させるのに必要な移動距離離 •  = ペアの⽚片⽅方をy軸反転させたあとの2点間 の距離離 •  もしくはそれぞれをy軸にのせるのに必要な 距離離の和 2013年 6月 30日 幾何コンテスト  2013
  21. 21. 2頂点の組を対称にする ⾚赤実線  = 対称にするのに必要な距離離 ⻘青実線 = y軸に乗せるのに必要な距離離 2013年 6月 30日 幾何コンテスト  2013
  22. 22. 解法3(150点) •  すでに線対称になっている頂点集合を状態 としたbitDP •  2通りの遷移があるのに注意 •  2頂点をペアとして対称にする •  1頂点をy軸上に移動させる 2013年 6月 30日 幾何コンテスト  2013
  23. 23. 解法4(200点) •  この図をよく⾒見見ると…… 2013年 6月 30日 幾何コンテスト  2013
  24. 24. 解法4(200点) •  y軸に載せないほうが得する ⇔ x 座標の符 号が異異なる a •  ということがわかる •  d < c, a < b から従う c d 2013年 6月 30日 幾何コンテスト  2013 b
  25. 25. 解法4(200点) •  x座標の符号が異異なるペアについてのみ、そ のペアを対称にするのに必要な距離離をコス トとする辺を張ったグラフを作る •  これは⼆二部グラフになる •  ⾜足りない側に  y  =  0  の頂点を付け⾜足して 左右の頂点を同数にしておく •  このようにして作ったグラフ上での最⼩小費 ⽤用完全マッチングとなる •  ⼆二部グラフなので最⼩小費⽤用流流を流流す 2013年 6月 30日 幾何コンテスト  2013
  26. 26. 回答状況 満点の⼈人数:26⼈人 最初に正の得点を得た提出 •  kyuridenamida(3分6秒, 50点) 最初に満点を得た提出 •  Navi(21分55秒) 2013年 6月 30日 幾何コンテスト  2013
  27. 27. C 泥棒 原案:@not_522 テスター:@not_522,@pepsin_amylase 解説:@not_522 参考文献:コンピュータ・ジオメトリ
  28. 28. C 泥棒 ごめんなさい ・制約を読み解くのが難しいです   1≦X,Y≦108,アジトは(0,0)    →アジトが囲まれることはない   わざとだった(悪質) ・被害者多数   数人は出ると思ってましたが…
  29. 29. C 泥棒 いいわけ ・読み落とす方が悪い ・座標の範囲は気をつけて欲しい   -105≦X,Y≦105だと誤差死の危険が ・冷静に考えてそんな難しい問題解けない   (4)はたぶん無理
  30. 30. C 泥棒 問題概要 ・監視所を結んだ線分で家が囲まれるか判定   線分に乗っていてもダメ ・監視所はどんどん増える ・家も次々与えられる
  31. 31. C(1) (1) ・監視所 N≦3 ・家 M=1
  32. 32. C(1) 線分に乗っているか ・はまりやすいです   何も見ずに書いたら自分もはまりました ・線分に対して点がどこにあるか判定   ccwを使いましょう   http://www.prefield.com/algorithm/geometry/ccw.html
  33. 33. C(1) 三角形の内部にあるか ・辺から見て全て左側か全て右側ならいい   ccwを使いましょう      左        右
  34. 34. C(2) (2) ・監視所 N≦100 ・家 M≦100
  35. 35. C(2) 実は(1)と同じ ・全部の線分に対して判定   O(N2M) ・全部の三角形に対して判定   O(N3M) →間に合う
  36. 36. C(3) (3) ・監視所 N≦1000 ・家 M≦1000
  37. 37. C(3) 三角形作ってると間に合いません …のつもりだったがテストケースが弱くて通る   ごめんなさい ・そもそも内側の線分とか考える必要ない   →凸包
  38. 38. C(3) 凸包 ・点の集合を覆う最小の凸多角形   O(N log N)のアルゴリズムがある     Andrew's monotone chainなど     http://www.prefield.com/algorithm/geometry/convex_hull.html ・凸包作るのはO(NMlogN)   間に合う
  39. 39. C(3) 多角形に点が含まれるか ・その点を通る半直線と凸包が何回交わるか   偶数だと外部、奇数だと内部   crossing number algorithm   http://www.prefield.com/algorithm/geometry/contains.html ・一回の判定がO(N)、全体でO(NM)   間に合う
  40. 40. C(4) (4) ・監視所 N≦100000 ・家 M≦100000
  41. 41. C(4) 監視所多すぎ ・毎回凸包求めてたら終わらない ・内外判定もさっきのアルゴリズムじゃダメ
  42. 42. C(4) 監視所多すぎ ・毎回凸包求めてたら終わらない   →動的凸包 ・内外判定もさっきのアルゴリズムじゃダメ   →凸多角形の性質を活かす
  43. 43. C(4) 動的凸包 ・点の挿入をO(log N)でやる   ならし計算量でOK ・計算幾何学では有名な問題 2 ・点の削除があってもO((log N) )らしい   Overmars, M. H., van Leeuwen, J. (1981)
  44. 44. C(4) Andrew's monotone chain ・上包と下包をくっつける      上包      下包
  45. 45. C(4) Andrew's monotone chain ・動的にできないか? ・上包と下包を別々に扱えば良さそう ・挿入する位置を決めて凸になるまで点を削除
  46. 46. C(4) 動的凸包 ・次の操作がO(log N)でできればOK   検索   挿入   削除 ・そう、平衡二分探索木
  47. 47. C(4) 平衡二分探索木 ・いろんなことができるデータ構造   解説は省略します   詳しく知りたい人はこちら   http://www.slideshare.net/iwiwi/2-12188757 ・C++ならSTLのsetでも通ります
  48. 48. C(4) 内外判定 ・動的凸包と同様に上包と下包でわける ・対応する辺を探して上か下か調べる   二分探索すればいい   O(log N) ・全体でO(M log N)
  49. 49. C 解答状況 正答数:3 ファーストアクセプト (3)uwi (0:32:14) (4)Navi (1:22:15)
  50. 50. D 魔女 原案:@not_522 テスター:@not_522,@pepsin_amylase 解説:@not_522
  51. 51. D 魔女 問題概要 ・魔女を中心とする円形の呪いには入れない ・スタートからゴールへの最短距離を求める ・呪いの半径が時間変化する   やばすぎ
  52. 52. D 魔女 必要なライブラリ ・ある点を通る円の接線 ・2円の共通接線
  53. 53. D(1) (1) ・N=1 ・Wv=0
  54. 54. D(1) 経路は3パターンしかない ・まっすぐゴールまで進む   呪いに触れずにすむならこれが最短 ・呪いの上側を通る ・呪いの下側を通る スタートを通る接線とゴールを通る接線を 求めると解ける
  55. 55. D(2) (2) ・N≦10 ・Wv=0
  56. 56. D(2) グラフに変換して最短経路問題を解く 頂点は ・スタート・ゴール ・スタート・ゴールからの接線の接点 ・2円の共通接線の接点 Impossibleになるケースが存在することに注意
  57. 57. D(3) (3) ・N≦10 ・Wv=0またはV<Wv
  58. 58. D(3) (2)にV<Wvが追加されただけ V<Wvの呪いの周囲を移動することは不可能 最短経路で呪いに追いつかれるなら他のルート でも追いつかれる 固定された呪いのみで最短経路を求めゴールで 広がる呪いに追いつかれているか調べればよい
  59. 59. D(4) (4) ・N=1 ・0<Wv<V
  60. 60. D(4) 経路は3パターンしかない ・まっすぐゴールまで進む   呪いに触れずにすむならこれが最短 ・呪いの上側を通る ・呪いの下側を通る 以降では魔女を原点とし、スタート地点が y軸上にあるとする
  61. 61. D(4) まっすぐゴールまで進む 呪いと接触しないかの判定が必要 →2次方程式を解くだけ 円の方程式:x2+y2=(Wr + t Wv)2 位置:(Sx + t dx, t dy) これが0 < t < |S-G|/Vに解を持つか判定する
  62. 62. D(4) 呪いの周囲を通る① スタートから直線移動して呪いの周囲を動く 軌跡になめらかに入る そのまま直線で動くと呪いと接するだけ →2次方程式を解くだけ 円と位置の連立方程式がtについて唯1つ解を もつようなdx,dyを求める
  63. 63. D(4) 呪いの周囲を通る② 呪いの周囲を動く軌跡 →極座標系で微分方程式を解くだけ 満たすべき方程式(・は時間微分を表す)
  64. 64. D(4) 呪いの周囲を通る③ 呪いの周囲を動く軌跡 対数螺旋(等角螺旋)になる
  65. 65. D(4) 呪いの周囲を通る④ 呪いから離れてゴールへ向かう →二分探索するだけ 対数螺旋の「中心を通る直線と螺旋の交点で の接線とのなす角は一定」という性質を使う と比較的容易に書ける
  66. 66. D(4) 呪いの周囲を通る⑤ 全体の長さを求める 一見、対数螺旋の長さを求める必要がありそう  →実は要らない 対数螺旋に触れた点、離れた点がわかればWv が一定なのでかかった時間はすぐに求められる
  67. 67. D 解答状況 正答数:0 ファーストアクセプト (1)uwi (1:24:39) (2)sune2 (2:46:25)

×