SlideShare uma empresa Scribd logo
1 de 67
Baixar para ler offline
幾何コン2013

@not_522
@pepsin_amylase
Problem  A
役⼈人
原案

:  @not_̲522

テスト :  @not_̲522,  @pepsin_̲amylase
解説

:  @pepsin_̲amylase

2013年 6月 30日
幾何コンテスト  2013
問題概要
•  xy平⾯面上に300頂点が与えられる
•  任意の3点は同⼀一直線上にない
•  共有点を持たないように出来るだけ多くの
三⾓角形を作れ

2013年 6月 30日
幾何コンテスト  2013
問題概要
•  xy平⾯面上に300頂点が与えられる
•  任意の3点は同⼀一直線上にない
•  共有点を持たないように出来るだけ多くの
三⾓角形を作れ
•  この制約が重要な役割を果たします

2013年 6月 30日
幾何コンテスト  2013
解法1
•  x 座標でソートし⼩小さい順に三⾓角形を作る
•  x 座標が同じ点は2個以下なのでうまくいき
ます

2013年 6月 30日
幾何コンテスト  2013
解法1  動作の様⼦子

2013年 6月 30日
幾何コンテスト  2013
解法1  動作の様⼦子

2013年 6月 30日
幾何コンテスト  2013
解法1  動作の様⼦子

2013年 6月 30日
幾何コンテスト  2013
解法2
•  頂点の凸包を取り、そこから辺を⼀一つ選ぶ
•  凸包を取ると頂点が辺の⽚片側に寄る
•  辺のどちらかの頂点を原点にとり、各頂点
の偏⾓角を考える
•  偏⾓角が⼀一番⼩小さい頂点とはじめに選んだ辺
で三⾓角形を作る
•  これを100回繰り返す
2013年 6月 30日
幾何コンテスト  2013
解法2  動作の様⼦子

2013年 6月 30日
幾何コンテスト  2013
解法2  動作の様⼦子

この点からの偏⾓角を考える

2013年 6月 30日
幾何コンテスト  2013
解法2  動作の様⼦子
3頂点が同⼀一直線上にないので、
最⼩小偏⾓角の頂点はただひとつに決まる

これが最⼩小偏⾓角の頂点

2013年 6月 30日
幾何コンテスト  2013
解法2  動作の様⼦子

2013年 6月 30日
幾何コンテスト  2013
回答状況
満点の⼈人数:88⼈人
最初に正の得点を得た提出
•  evima(1分21秒, 1点)
最初に満点を得た提出
•  semiexp(3分41秒)

2013年 6月 30日
幾何コンテスト  2013
Problem  B
⽟玉座の間
原案

:  @not_̲522

テスト :  @not_̲522,  @pepsin_̲amylase
解説

:  @pepsin_̲amylase

2013年 6月 30日
幾何コンテスト  2013
問題概要
•  xy平⾯面上にn頂点が与えられる
•  y軸に関して線対称になるように点を動かし
たい
•  移動先は重複していてもよい
•  移動距離離の総和を最⼩小化せよ

2013年 6月 30日
幾何コンテスト  2013
部分点
•  (1) 50点 :n = 1
•  (2) 50点 :n ≦ 10
•  (3) 50点 :n ≦ 20
•  (4) 50点 :n ≦ 100

2013年 6月 30日
幾何コンテスト  2013
解法1(50点)
•  1頂点の場合はy軸に移動させるしかない
•  x座標の絶対値が答え

2013年 6月 30日
幾何コンテスト  2013
解法2(100点)
•  対応させるペアの組み合わせをすべて試す
•  n! / 2(n/2) ≦ 113400通り

2013年 6月 30日
幾何コンテスト  2013
2頂点の組を対称にする
•  各ペアを対称にするのに必要な移動距離離
•  = ペアの⽚片⽅方をy軸反転させたあとで2点
を⼀一致させるのに必要な移動距離離
•  = ペアの⽚片⽅方をy軸反転させたあとの2点間
の距離離
•  もしくはそれぞれをy軸にのせるのに必要な
距離離の和
2013年 6月 30日
幾何コンテスト  2013
2頂点の組を対称にする

⾚赤実線  = 対称にするのに必要な距離離
⻘青実線 = y軸に乗せるのに必要な距離離

2013年 6月 30日
幾何コンテスト  2013
解法3(150点)
•  すでに線対称になっている頂点集合を状態
としたbitDP
•  2通りの遷移があるのに注意
•  2頂点をペアとして対称にする
•  1頂点をy軸上に移動させる

2013年 6月 30日
幾何コンテスト  2013
解法4(200点)
•  この図をよく⾒見見ると……

2013年 6月 30日
幾何コンテスト  2013
解法4(200点)
•  y軸に載せないほうが得する ⇔ x 座標の符
号が異異なる
a

•  ということがわかる
•  d < c, a < b から従う

c
d

2013年 6月 30日
幾何コンテスト  2013

b
解法4(200点)
•  x座標の符号が異異なるペアについてのみ、そ
のペアを対称にするのに必要な距離離をコス
トとする辺を張ったグラフを作る
•  これは⼆二部グラフになる
•  ⾜足りない側に  y  =  0  の頂点を付け⾜足して
左右の頂点を同数にしておく
•  このようにして作ったグラフ上での最⼩小費
⽤用完全マッチングとなる
•  ⼆二部グラフなので最⼩小費⽤用流流を流流す
2013年 6月 30日
幾何コンテスト  2013
回答状況
満点の⼈人数:26⼈人
最初に正の得点を得た提出
•  kyuridenamida(3分6秒, 50点)
最初に満点を得た提出
•  Navi(21分55秒)

2013年 6月 30日
幾何コンテスト  2013
C 泥棒

原案:@not_522
テスター:@not_522,@pepsin_amylase
解説:@not_522
参考文献:コンピュータ・ジオメトリ
C 泥棒
ごめんなさい
・制約を読み解くのが難しいです
  1≦X,Y≦108,アジトは(0,0)
   →アジトが囲まれることはない
  わざとだった(悪質)
・被害者多数
  数人は出ると思ってましたが…
C 泥棒
いいわけ
・読み落とす方が悪い
・座標の範囲は気をつけて欲しい
  -105≦X,Y≦105だと誤差死の危険が
・冷静に考えてそんな難しい問題解けない
  (4)はたぶん無理
C 泥棒
問題概要
・監視所を結んだ線分で家が囲まれるか判定
  線分に乗っていてもダメ
・監視所はどんどん増える
・家も次々与えられる
C(1)
(1)
・監視所 N≦3
・家 M=1
C(1)
線分に乗っているか
・はまりやすいです
  何も見ずに書いたら自分もはまりました
・線分に対して点がどこにあるか判定
  ccwを使いましょう
  http://www.prefield.com/algorithm/geometry/ccw.html
C(1)
三角形の内部にあるか
・辺から見て全て左側か全て右側ならいい
  ccwを使いましょう

     左        右
C(2)
(2)
・監視所 N≦100
・家 M≦100
C(2)
実は(1)と同じ
・全部の線分に対して判定
  O(N2M)
・全部の三角形に対して判定
  O(N3M)
→間に合う
C(3)
(3)
・監視所 N≦1000
・家 M≦1000
C(3)
三角形作ってると間に合いません
…のつもりだったがテストケースが弱くて通る
  ごめんなさい
・そもそも内側の線分とか考える必要ない
  →凸包
C(3)
凸包
・点の集合を覆う最小の凸多角形
  O(N log N)のアルゴリズムがある
    Andrew's monotone chainなど
    http://www.prefield.com/algorithm/geometry/convex_hull.html
・凸包作るのはO(NMlogN)
  間に合う
C(3)
多角形に点が含まれるか
・その点を通る半直線と凸包が何回交わるか
  偶数だと外部、奇数だと内部
  crossing number algorithm
  http://www.prefield.com/algorithm/geometry/contains.html
・一回の判定がO(N)、全体でO(NM)
  間に合う
C(4)
(4)
・監視所 N≦100000
・家 M≦100000
C(4)
監視所多すぎ
・毎回凸包求めてたら終わらない
・内外判定もさっきのアルゴリズムじゃダメ
C(4)
監視所多すぎ
・毎回凸包求めてたら終わらない
  →動的凸包
・内外判定もさっきのアルゴリズムじゃダメ
  →凸多角形の性質を活かす
C(4)
動的凸包
・点の挿入をO(log N)でやる
  ならし計算量でOK
・計算幾何学では有名な問題
2

・点の削除があってもO((log N) )らしい
  Overmars, M. H., van Leeuwen, J. (1981)
C(4)
Andrew's monotone chain
・上包と下包をくっつける
     上包

     下包
C(4)
Andrew's monotone chain
・動的にできないか?
・上包と下包を別々に扱えば良さそう
・挿入する位置を決めて凸になるまで点を削除
C(4)
動的凸包
・次の操作がO(log N)でできればOK
  検索
  挿入
  削除
・そう、平衡二分探索木
C(4)
平衡二分探索木
・いろんなことができるデータ構造
  解説は省略します
  詳しく知りたい人はこちら
  http://www.slideshare.net/iwiwi/2-12188757
・C++ならSTLのsetでも通ります
C(4)
内外判定
・動的凸包と同様に上包と下包でわける
・対応する辺を探して上か下か調べる
  二分探索すればいい
  O(log N)
・全体でO(M log N)
C 解答状況

正答数:3
ファーストアクセプト
(3)uwi (0:32:14)
(4)Navi (1:22:15)
D 魔女

原案:@not_522
テスター:@not_522,@pepsin_amylase
解説:@not_522
D 魔女
問題概要
・魔女を中心とする円形の呪いには入れない
・スタートからゴールへの最短距離を求める
・呪いの半径が時間変化する
  やばすぎ
D 魔女
必要なライブラリ
・ある点を通る円の接線
・2円の共通接線
D(1)
(1)
・N=1
・Wv=0
D(1)
経路は3パターンしかない
・まっすぐゴールまで進む
  呪いに触れずにすむならこれが最短
・呪いの上側を通る
・呪いの下側を通る
スタートを通る接線とゴールを通る接線を
求めると解ける
D(2)
(2)
・N≦10
・Wv=0
D(2)
グラフに変換して最短経路問題を解く
頂点は
・スタート・ゴール
・スタート・ゴールからの接線の接点
・2円の共通接線の接点
Impossibleになるケースが存在することに注意
D(3)
(3)
・N≦10
・Wv=0またはV<Wv
D(3)
(2)にV<Wvが追加されただけ
V<Wvの呪いの周囲を移動することは不可能
最短経路で呪いに追いつかれるなら他のルート
でも追いつかれる
固定された呪いのみで最短経路を求めゴールで
広がる呪いに追いつかれているか調べればよい
D(4)
(4)
・N=1
・0<Wv<V
D(4)
経路は3パターンしかない
・まっすぐゴールまで進む
  呪いに触れずにすむならこれが最短
・呪いの上側を通る
・呪いの下側を通る
以降では魔女を原点とし、スタート地点が
y軸上にあるとする
D(4)
まっすぐゴールまで進む
呪いと接触しないかの判定が必要
→2次方程式を解くだけ
円の方程式:x2+y2=(Wr + t Wv)2
位置:(Sx + t dx, t dy)
これが0 < t < |S-G|/Vに解を持つか判定する
D(4)
呪いの周囲を通る①
スタートから直線移動して呪いの周囲を動く
軌跡になめらかに入る
そのまま直線で動くと呪いと接するだけ
→2次方程式を解くだけ
円と位置の連立方程式がtについて唯1つ解を
もつようなdx,dyを求める
D(4)
呪いの周囲を通る②
呪いの周囲を動く軌跡
→極座標系で微分方程式を解くだけ
満たすべき方程式(・は時間微分を表す)
D(4)
呪いの周囲を通る③
呪いの周囲を動く軌跡

対数螺旋(等角螺旋)になる
D(4)
呪いの周囲を通る④
呪いから離れてゴールへ向かう
→二分探索するだけ
対数螺旋の「中心を通る直線と螺旋の交点で
の接線とのなす角は一定」という性質を使う
と比較的容易に書ける
D(4)
呪いの周囲を通る⑤
全体の長さを求める
一見、対数螺旋の長さを求める必要がありそう
 →実は要らない
対数螺旋に触れた点、離れた点がわかればWv
が一定なのでかかった時間はすぐに求められる
D 解答状況

正答数:0
ファーストアクセプト
(1)uwi (1:24:39)
(2)sune2 (2:46:25)

Mais conteúdo relacionado

Mais procurados

AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Inc.
 
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方Kensuke Otsuki
 
AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説AtCoder Inc.
 
AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Inc.
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶしAtCoder Inc.
 
AtCoder Regular Contest 040 解説
AtCoder Regular Contest 040 解説AtCoder Regular Contest 040 解説
AtCoder Regular Contest 040 解説AtCoder Inc.
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化yosupo
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Inc.
 
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説AtCoder Inc.
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界Preferred Networks
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Inc.
 
AtCoder Regular Contest 017
AtCoder Regular Contest 017AtCoder Regular Contest 017
AtCoder Regular Contest 017AtCoder Inc.
 
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Inc.
 
AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説AtCoder Inc.
 

Mais procurados (20)

AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
 
Za atsu-20170328
Za atsu-20170328Za atsu-20170328
Za atsu-20170328
 
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
 
AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説
 
AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし
 
AtCoder Regular Contest 040 解説
AtCoder Regular Contest 040 解説AtCoder Regular Contest 040 解説
AtCoder Regular Contest 040 解説
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
全域木いろいろ
全域木いろいろ全域木いろいろ
全域木いろいろ
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046
 
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
 
AtCoder Regular Contest 017
AtCoder Regular Contest 017AtCoder Regular Contest 017
AtCoder Regular Contest 017
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説
 
AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説
 
Chokudai search
Chokudai searchChokudai search
Chokudai search
 

Destaque

AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Inc.
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Inc.
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoder Inc.
 
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)AtCoder Inc.
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)AtCoder Inc.
 

Destaque (7)

AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
 
素集合データ構造
素集合データ構造素集合データ構造
素集合データ構造
 
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
 
TCO2017R1
TCO2017R1TCO2017R1
TCO2017R1
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 

幾何コンテスト2013