Submit Search
AtCoder Regular Contest 039 解説
2 likes
12,850 views
A
AtCoder Inc.
AtCoder Regular Contest 039 解説
Education
Read more
1 of 55
Download now
Downloaded 29 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Most read
28
Most read
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Most read
46
47
48
49
50
51
52
53
54
55
More Related Content
PPTX
AtCoder Regular Contest 029 解説
AtCoder Inc.
PPTX
AtCoder Beginner Contest 012 解説
AtCoder Inc.
PDF
AtCoder Beginner Contest 015 解説
AtCoder Inc.
PDF
Abc009
AtCoder Inc.
PPTX
AtCoder Beginner Contest 002 解説
AtCoder Inc.
PDF
プログラミングコンテストでのデータ構造
Takuya Akiba
PDF
AtCoder Regular Contest 038 解説
AtCoder Inc.
PDF
AtCoder Regular Contest 031 解説
AtCoder Inc.
AtCoder Regular Contest 029 解説
AtCoder Inc.
AtCoder Beginner Contest 012 解説
AtCoder Inc.
AtCoder Beginner Contest 015 解説
AtCoder Inc.
Abc009
AtCoder Inc.
AtCoder Beginner Contest 002 解説
AtCoder Inc.
プログラミングコンテストでのデータ構造
Takuya Akiba
AtCoder Regular Contest 038 解説
AtCoder Inc.
AtCoder Regular Contest 031 解説
AtCoder Inc.
What's hot
(20)
PDF
Rolling Hashを殺す話
Nagisa Eto
PDF
abc031
AtCoder Inc.
PDF
AtCoder Beginner Contest 029 解説
AtCoder Inc.
PDF
AtCoder Beginner Contest 007 解説
AtCoder Inc.
PDF
AtCoder Regular Contest 042 解説
AtCoder Inc.
PDF
双対性
Yoichi Iwata
PDF
ウェーブレット木の世界
Preferred Networks
PDF
AtCoder Regular Contest 037 解説
AtCoder Inc.
PDF
最小カットを使って「燃やす埋める問題」を解く
shindannin
PDF
最大流 (max flow)
HCPC: 北海道大学競技プログラミングサークル
PDF
AtCoder Regular Contest 032 解説
AtCoder Inc.
PDF
AtCoder Beginner Contest 013 解説
AtCoder Inc.
PDF
AtCoder Beginner Contest 035 解説
AtCoder Inc.
PDF
指数時間アルゴリズムの最先端
Yoichi Iwata
PDF
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
PDF
色々なダイクストラ高速化
yosupo
PDF
Convex Hull Trick
HCPC: 北海道大学競技プログラミングサークル
PDF
AtCoder Regular Contest 026 解説
AtCoder Inc.
PDF
AtCoder Regular Contest 036 解説
AtCoder Inc.
PDF
Binary indexed tree
HCPC: 北海道大学競技プログラミングサークル
Rolling Hashを殺す話
Nagisa Eto
abc031
AtCoder Inc.
AtCoder Beginner Contest 029 解説
AtCoder Inc.
AtCoder Beginner Contest 007 解説
AtCoder Inc.
AtCoder Regular Contest 042 解説
AtCoder Inc.
双対性
Yoichi Iwata
ウェーブレット木の世界
Preferred Networks
AtCoder Regular Contest 037 解説
AtCoder Inc.
最小カットを使って「燃やす埋める問題」を解く
shindannin
最大流 (max flow)
HCPC: 北海道大学競技プログラミングサークル
AtCoder Regular Contest 032 解説
AtCoder Inc.
AtCoder Beginner Contest 013 解説
AtCoder Inc.
AtCoder Beginner Contest 035 解説
AtCoder Inc.
指数時間アルゴリズムの最先端
Yoichi Iwata
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
色々なダイクストラ高速化
yosupo
Convex Hull Trick
HCPC: 北海道大学競技プログラミングサークル
AtCoder Regular Contest 026 解説
AtCoder Inc.
AtCoder Regular Contest 036 解説
AtCoder Inc.
Binary indexed tree
HCPC: 北海道大学競技プログラミングサークル
Ad
Similar to AtCoder Regular Contest 039 解説
(10)
PDF
Indeedなう 予選A 解説
AtCoder Inc.
PDF
AtCoder Beginner Contest 030 解説
AtCoder Inc.
PDF
AtCoder Regular Contest 035 解説
AtCoder Inc.
PDF
AtCoder Beginner Contest 008 解説
AtCoder Inc.
PDF
AtCoder Beginner Contest 033 解説
AtCoder Inc.
PPTX
20160620 競技プログラミングのすゝめ
Yoshiki TAKADA
PDF
AtCoder Beginner Contest 026 解説
AtCoder Inc.
PPTX
AtCoder Beginner Contest 004 解説
AtCoder Inc.
PDF
Pythonではじめる競技プログラミング
cocodrips
PDF
AtCoder Beginner Contest 019 解説
AtCoder Inc.
Indeedなう 予選A 解説
AtCoder Inc.
AtCoder Beginner Contest 030 解説
AtCoder Inc.
AtCoder Regular Contest 035 解説
AtCoder Inc.
AtCoder Beginner Contest 008 解説
AtCoder Inc.
AtCoder Beginner Contest 033 解説
AtCoder Inc.
20160620 競技プログラミングのすゝめ
Yoshiki TAKADA
AtCoder Beginner Contest 026 解説
AtCoder Inc.
AtCoder Beginner Contest 004 解説
AtCoder Inc.
Pythonではじめる競技プログラミング
cocodrips
AtCoder Beginner Contest 019 解説
AtCoder Inc.
Ad
More from AtCoder Inc.
(20)
PPTX
TCO2017R1
AtCoder Inc.
PPTX
AtCoderに毎回参加したくなる仕組み
AtCoder Inc.
PDF
Square869120 contest #2
AtCoder Inc.
PDF
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
AtCoder Inc.
PDF
Chokudai Contest 001
AtCoder Inc.
PDF
AtCoder Regular Contest 049 解説
AtCoder Inc.
PPTX
AtCoder Beginner Contest 034 解説
AtCoder Inc.
PDF
AtCoder Regular Contest 048
AtCoder Inc.
PDF
MUJINプログラミングチャレンジ2016 解説
AtCoder Inc.
PDF
DDPC 2016 予選 解説
AtCoder Inc.
PDF
arc047
AtCoder Inc.
PDF
abc032
AtCoder Inc.
PDF
CODE FESTIVAL 2015 沖縄ツアー 解説
AtCoder Inc.
PDF
AtCoder Regular Contest 046
AtCoder Inc.
PDF
CODE FESTIVAL 2015 解説
AtCoder Inc.
PDF
CODE FESTIVAL 2015 予選B 解説
AtCoder Inc.
PDF
AtCoder Regular Contest 045 解説
AtCoder Inc.
PDF
CODE FESTIVAL 2015 予選A 解説
AtCoder Inc.
PDF
AtCoder Regular Contest 044 解説
AtCoder Inc.
PDF
AtCoder Beginner Contest 028 解説
AtCoder Inc.
TCO2017R1
AtCoder Inc.
AtCoderに毎回参加したくなる仕組み
AtCoder Inc.
Square869120 contest #2
AtCoder Inc.
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
AtCoder Inc.
Chokudai Contest 001
AtCoder Inc.
AtCoder Regular Contest 049 解説
AtCoder Inc.
AtCoder Beginner Contest 034 解説
AtCoder Inc.
AtCoder Regular Contest 048
AtCoder Inc.
MUJINプログラミングチャレンジ2016 解説
AtCoder Inc.
DDPC 2016 予選 解説
AtCoder Inc.
arc047
AtCoder Inc.
abc032
AtCoder Inc.
CODE FESTIVAL 2015 沖縄ツアー 解説
AtCoder Inc.
AtCoder Regular Contest 046
AtCoder Inc.
CODE FESTIVAL 2015 解説
AtCoder Inc.
CODE FESTIVAL 2015 予選B 解説
AtCoder Inc.
AtCoder Regular Contest 045 解説
AtCoder Inc.
CODE FESTIVAL 2015 予選A 解説
AtCoder Inc.
AtCoder Regular Contest 044 解説
AtCoder Inc.
AtCoder Beginner Contest 028 解説
AtCoder Inc.
AtCoder Regular Contest 039 解説
1.
AtCoder(Regular(Contest(039 解説 AtCoder株式会社(代表取締役( 高橋(直大 1
2.
競技プログラミングを始める前に • 競技プログラミングをやったことがない人へ( – まずはこっちのスライドを見よう!( –
http://www.slideshare.net/chokudai/abc004 2
3.
©AtCoder(Inc.(All(rights(reserved. 3 A問題(A(C(B(Problem 解説スライド担当: 森田
晃平
4.
A問題 問題概要 • 3桁の整数A,(Bが与えられる( • 1桁だけ書き換えることができる( •
A(C(Bを最大化せよ( • ただし100の位を0に書き換えてはいけない 4
5.
A問題 アルゴリズム • Aはできる限り大きくしたい( • Aのどこかを書き換えるなら9にするべき( •
Bはできる限り小さくしたい( • Bのどこかを書き換えるなら?( - 1,(10の位を書き換えるなら0にするべき( - 100の位を書き換えるなら1にするべき 5
6.
A問題 アルゴリズム • つまり書き換え方は6パターン( - Aの1の位を9に( -
Aの10の位を9に( - Aの100の位を9に( - Bの1の位を0に( - Bの10の位を0に( - Bの100の位を1に 6
7.
A問題 アルゴリズム 7 全部試す!
8.
A問題 アルゴリズム • 文字列(10進数) 数字の相互変換が出来ると楽です 8 int
a = 123; string a_str = to_string(a); a_str[0] = '9'; int new_a = stoi(a_str); printf("%d %dn", a, new_a); //123 923 C++11による一例を載せておきます
9.
©AtCoder Inc. All
rights reserved. B問題 高橋幼稚園 解説スライド:三上 和馬 1. 問題概要 2. 考察 3. アルゴリズム 1
10.
B問題 問題概要 • N人の児童にK個のキャンディを配る •
全体の幸福度=(各児童に与えられたキャンディの個数の 積) • 全体の幸福度が最大となるような配り方の総数を求めよ • ただし答えは大きいので,10^9+7で余りを取ること • 1≦N≦100, 1≦K≦500 2
11.
B問題 考察 • 最大となるような配り方
どんなも か考える • 結論を言うと,N≦K とき,できるだけ均等に分けると最大 • たとえ N=4,K=10 とき順番を無視すれ , 3個 3個 2個 2個 • というふうに配ると最大になる. • したがって, – (K/Nを切り捨てた値)個 少なくとも全員に配れる で必ず 配る – 残り K%N個を各児童に高々1つ分配する • という分配方法 総数を求める問題になる 3
12.
B問題 考察 • N=4,K=10のケースを図で表してみる –
(K/Nを切り捨てた値)=2 – K%N=2 • なので,固定キャンディを□,動かせるキャンディを■で表すと – □□■ – □□■ – □□ – □□ • ■の分配方法の総数 =N個の中からK%N個を選ぶ組み合わせの総数 • = 𝑁 𝐶 𝐾%𝑁(図のケースだと4 𝐶2 = 6が答え 4
13.
B問題 考察 • しかし,N>Kのときどう配っても全体の幸福度は0になってしまう ので,均等に分配する必要はなく,どんな配り方をしてもよい •
したがって答えは,K個のものをN個の箱に分配する組み合わ せの個数に等しい • この組み合わせの総数は 𝑁 𝐻 𝐾 = 𝑁+𝐾−1 𝐶 𝐾で表される • この等式の証明はネットで検索するとたくさん分かりやすい解説 が見つかるので,導出方法も含めてきちんと理解しておくと良い 5
14.
B問題 アルゴリズム • 考察をまとめると以下
ようなプログラムを書け 良い – N ≦ K とき 𝑁 𝐶 𝐾%𝑁 を10^9+7で割った余りを出力 – 𝑁 > 𝐾 とき 𝑁+𝐾−1 𝐶 𝐾を10^9+7で割った余りを出力 • N≦K ケースしか考慮していない場合 80点しか取れない ような部分点を設定した • nCr 求め方 次 スライド 24ページ目を参考にしてくださ い: http://www.slideshare.net/chokudai/abc021 • 今回 ,パスカル 三角形を直接生成する方法で間に合い ます 6
15.
©AtCoder Inc. All
rights reserved. C問題 幼稚園児高橋君 解説スライド:三上 和馬 1. 問題概要 2. 考察 3. アルゴリズム 4. 参考 7
16.
C問題 問題概要 • 無限に広がる二次元格子があり,最初原点にいる •
上下左右のいずれかに未訪問の格子にたどり着くまで直進 するという動作を繰り返す • 各時点でどの方向を選んだかというK個の情報 𝑆1, 𝑆2, 𝑆3, … , 𝑆 𝐾が与えられるので,シミュレーションして最 終的に辿り着いた地点を出力せよ • 1≦K≦200000 8
17.
C問題 考察 • 愚直に1マスずつ移動するシミュレーション •
一度 直進動作に 最悪K回 移動が発生 (左右に動き続けるケースを想定すると良い) • これだととても間に合わない • そこで,各格子について上下左右 最近傍 未訪問格子 座 標を記録しておき,逐次更新することを考える • 更新方法だが,ある格子を訪問したとき,そ 4近傍 格子 みについて最近傍 情報を書き換えれ 十分 • そ 情報に基づいてシミュレーションすれ 即座に次 未訪問 格子に辿り着ける 9
18.
C問題 考察 • イメージは以下の通り •
このような情報を全ての格子に持たせる 10
19.
C問題 考察 • 格子を訪問済みにするとき
, 訪問済みにした格子 近傍情報を利用して, 以下 ように4近傍 格子 情報を張り替えれ よい 11
20.
C問題 考察 • 具体的には,訪問済みにする格子をxとすると –
xの右格子の左格子=xの左格子 – xの左格子の右格子=xの右格子 – xの上格子の下格子=xの下格子 – xの下格子の上格子=xの上格子 というふうに張り替え (左格子,右格子,…という表記は全て未訪問のものを指す) 12
21.
C問題 考察 • 実際に格子は無限大に広がっているので, 予め全格子について初期化しておくことはできない •
情報を更新する必要が出てきたときに初めて近傍の情報を生 成する方針を取る(遅延評価) • 実際に訪問する格子はK個しかなく,訪問済み操作時も4近傍し か見ないので,情報が更新される格子はO(K)個 • 格子の近傍情報はハッシュや平衡二分探索木で管理する • これで一度の直進動作はO(1)もしくはO(log K)で行えるように なった 13
22.
C問題 アルゴリズム • 近傍情報更新
遅延評価 実装方法として , – 既に更新しようとしている格子 近傍情報が生成されてる なら新しく生成せず,それを更新する – 生成されていないなら 近傍情報を生成する • という場合分けを行うと良い • あと 近傍情報を使ってシミュレーションする • 方向に対してインデックスを時計周りに定義するなどして,実装 を軽くする工夫をしましょう! • ハッシュマップまた 平衡二分探索木を使え ,全体 計算量 O(K) もしく O(K log K) となる 14
23.
C問題 参考 • こ
ような4近傍 情報を持つデータ構造 DancingLinksと呼 れています • 興味がある人 調べてみてください 15
24.
©AtCoder(Inc.(All(rights(reserved. D問題 旅行会社高橋君 9 解説スライド担当: 森田 晃平
25.
D問題 問題概要 • N頂点M辺の無向グラフが与えられる( • Q個クエリが飛んでくるので処理する( -
頂点A,(B,(Cが与えられる( - A(C>(B(C>(C(と経由するトレイルがあるか判定( • 制約( - 1(<=(N(<=(100,000( - 1(<=(M(<=(200,000( - 1(<=(Q(<=(100,000 10
26.
D問題 アルゴリズム この問題を解くには”二重辺連結成分分解”というアルゴリ ズムを使用する( 11
27.
D問題 アルゴリズム 二重辺連結成分分解とは?( 無向グラフを二重辺連結成分に分解するアルゴリズム( 二重辺連結成分とは?( 橋を含まない連結な無向グラフの事を二重辺連結成分と呼ぶ( 橋とは?( 辺(u,(v)について、その辺を取り除くと(u,(v)が連結ではなくなってし まう時その辺の事を橋と呼ぶ 12
28.
D問題 アルゴリズム 13 橋と二重辺連結成分の例
29.
D問題 アルゴリズム Gが二重辺連結成分の時、Gの任意の2頂点s,(tについて( s,(tを結ぶ、辺を共有しない2本のパス(辺素パス)が存在する( これはGの任意の2頂点s,(tについて、s(C>(t(へとフローが2以 上流せるとも考えられる( ただし辺は全て容量1の無向辺として考える 14 s t
30.
D問題 アルゴリズム Gは連結なので明らかにフローが1は流せる( Gに橋がなければフローが2以上流せる事を示したい 15
31.
D問題 アルゴリズム 最大フロー最小カット定理を使う( 仮に最大フローが1だとすると、S,(T間に辺が1本だけ架かっているsCtカットが存在す る事になる( その1本の辺を取り除くと、( SとTが非連結になってしまうため( 明らかに橋( よって最大フローが1なら橋が存在する( C>(Gに橋がなければ必ずフローが2以上流せる( C>(Gが二重辺連結成分なら必ずフローが2以上流せる 16
32.
D問題 アルゴリズム s,(tを結ぶ、辺を共有しない2本のパス(辺素パス)が必ず存在 する事がわかった( 更に、任意の3頂点(s,(t1,(t2(について辺を共有しない(s(C(t1(パ スと(s(C(t2パスが存在する事も言える 17 s t1 t2
33.
D問題 アルゴリズム これは、新しい頂点xを用意して(xCt1,(xCt2という辺を貼る と、s(C(x(間に2本の辺素パスがある事からわかる 18 s t1 t2 s t1 t2 x s t1 t2 x s t1 t2
34.
D問題 アルゴリズム よって、A,(B,(C(が同じ二重辺連結成分にある場合、クエリ の答えは(OK( じゃあ違う場合はどうする? 19
35.
D問題 アルゴリズム まず二重辺連結成分分解をして、二重辺連結成分を全部検 出する( 二重辺連結成分分解は、グラフの橋を全部検出して取り除 けば残ったものが全て二重連結成分( ここで、元のグラフで二重辺連結成分を縮約して1つの頂点 にしてしまうと、橋だけが辺として残り、グラフは木にな る 20
36.
D問題 アルゴリズム 21
37.
D問題 アルゴリズム 22 α β γ
38.
D問題 アルゴリズム こうして生まれた木においてA,(B,(Cを含む頂点をそれぞれX,( Y,(Zとすると、パス(X(C(Z(上にYが存在するかどうかがクエリ の答えになる 23 X Y Z XY Z A B C
39.
D問題 アルゴリズム こうして生まれた木においてA,(B,(Cを含む頂点をそれぞれX,( Y,(Zとすると、パス(X(C(Z(上にYが存在するかどうかがクエリ の答えになる 23 X Y Z XY Z A B C
40.
D問題 アルゴリズム こうして生まれた木においてA,(B,(Cを含む頂点をそれぞれX,( Y,(Zとすると、パス(X(C(Z(上にYが存在するかどうかがクエリ の答えになる 23 X Y Z この辺を2回使ってしまう XY Z A B C
41.
D問題 アルゴリズム こうして生まれた木においてA,(B,(Cを含む頂点をそれぞれX,( Y,(Zとすると、パス(X(C(Z(上にYが存在するかどうかがクエリ の答えになる 23 X Y Z この辺を2回使ってしまう XY Z A B C
42.
D問題 アルゴリズム こうして生まれた木においてA,(B,(Cを含む頂点をそれぞれX,( Y,(Zとすると、パス(X(C(Z(上にYが存在するかどうかがクエリ の答えになる 23 X Y Z この辺を2回使ってしまう XY Z A B C よさそう
43.
D問題 アルゴリズム パス(X(C(Z(上にYが存在するかどうかは( dist(X,(Z)(==(dist(X,(Y)(+(dist(Y,(Z)( で判定できる( ただしdist(a,(b)は木でのパス(a(C(b(の長さ( distは適当な頂点を根にしておけば、( dist(a,(b)(=(depth(a)(+(depth(b)(C(2*depth(lca(a,(b))( で計算できる 24 LCA参考: ABC 014
D - 閉路 http://abc014.contest.atcoder.jp/tasks/abc014_4
44.
D問題 橋の列挙法 以上より二重辺連結成分分解ができればこの問題が解ける 事がわかった( そして橋の列挙ができれば二重辺連結成分分解が出来る( じゃあどうやって橋を列挙するのか?( lowlinkというものを使用するアルゴリズムが有名ですが、( 今回はimos法でやる方法を紹介します 25
45.
D問題 橋の列挙法 まずはdfs木を構築し、辺を木に使われる辺と後退辺に分類 します 26
46.
D問題 橋の列挙法 後退辺ごとに、対応するパス上の辺を塗る 27
47.
D問題 橋の列挙法 後退辺ごとに、対応するパス上の辺を塗る 27
48.
D問題 橋の列挙法 後退辺ごとに、対応するパス上の辺を塗る 27
49.
D問題 橋の列挙法 後退辺ごとに、対応するパス上の辺を塗る 27
50.
D問題 橋の列挙法 後退辺ごとに、対応するパス上の辺を塗る 27
51.
D問題 橋の列挙法 後退辺ごとに、対応するパス上の辺を塗る 27
52.
D問題 橋の列挙法 後退辺ごとに、対応するパス上の辺を塗る 27
53.
D問題 橋の列挙法 後退辺ごとに、対応するパス上の辺を塗る 27 これで塗られなかった辺が橋
54.
D問題 橋の列挙法 塗るのは愚直にやればO(NM)ぐらいだが,(imos法でO(N+M)に できる 28 +1 +1 +1 -1 -1 -1
55.
D問題 29 お疲れ様でした!
Download