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.

AtCoder Regular Contest 045 解説

4,782 views

Published on

AtCoder Regular Contest 045 解説

Published in: Education
  • D0WNL0AD FULL ▶ ▶ ▶ ▶ http://1lite.top/Hmnbd ◀ ◀ ◀ ◀
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m77EgH } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THAT BOOKS/FILE INTO AVAILABLE FORMAT - (Unlimited) ......................................................................................................................... ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes Christian, Classics, Comics, Contemporary, Cookbooks, Art, Biography, Business, Chick Lit, Children's, Manga, Memoir, Music, Science, Science Fiction, Self Help, History, Horror, Humor And Comedy, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m77EgH } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

AtCoder Regular Contest 045 解説

  1. 1. AtCoder Regular Contest 045 解説 AtCoder株式会社 10/10/15
  2. 2. スペース高橋君 解説スライド担当: 森田 晃平(@yosupot)
  3. 3. 問題概要 • 文字列が与えられる • Left → < • Right → > • AtCoder → A • と置換して出力
  4. 4. 解法(C++) • getline等の関数を使うと1行まるまる読み込めます • cin, scanfで読み込む場合は空白文字に注意してく ださい • 空白後の1文字を見て、Lなら<、Rなら>、AならA を出力し、そのあと次の空白まで進む。などの解法 が考えられます
  5. 5. 解法 • 文字列を扱う高級な関数を使うと楽です • たとえばpythonならreplace('AtCoder', 'A')で AtCoderを全部Aにできます • プロコンにおいてC++しか使わない人は多いと思い ますが、他にpython,ruby等の文字列処理のライブ ラリが充実している言語を1個は使えるとよいです
  6. 6. ©AtCoder Inc. All rights reserved. B問題 ドキドキデート大作戦高橋君(解説スライド:三上) 1. 問題概要 2. 考察 3. 解法 4. アルゴリズム動作例 1
  7. 7. B問題 問題概要 • Nコの教室があり,全ての教室を掃除したい • 担当すると掃除しなければならない区間(掃除区間)がMコ 与えられる(これは重なることがある) • ある区間iを掃除しなかったとしても,全ての教室が問題 なく掃除されているような区間iを全て列挙せよ. • Mコの区間を全て使った場合に全ての教室が掃除できる ことは保証されている. • 1≦N≦10^6 • 1≦M≦10^5 2
  8. 8. B問題 考察 • まず,各教室がいくつの区間に被覆されているかを求めておくと 見通しがよくなる. • これはimos法(※)を用いて時間計算量 O(N+M) で達成可能 ※ http://www.slideshare.net/chokudai/abc014 (P3参照) • 各教室がいくつの区間に被覆されてるか分かれば, ある教室を除いても全ての教室が掃除できる ⇔区間内の全ての教室が2つ以上の区間に被覆されている 3
  9. 9. B問題 部分点解法(30点) • 追加制約 – 任意の教室 i(1≦i≦N) について,その教室を含む掃除区間の数は高々 2 つである • この制約上では,全ての区間について,区間内の全ての教室 の被覆数を繰り返し文で愚直にチェックして,それらの最小値が 2以上ならその区間を解の候補に入れるというアルゴリズムで 正解する. • 理由は,for文で愚直にチェックしたところで,2回より多く同じ教 室を見ることはないので,高々 2N 回しかループしないから • 別解もたくさんある – 各教室について,その教室を被覆している区間の番号の列 を持つ配列を用意する等 4
  10. 10. B問題 満点解法 • 各教室がいくつの区間に被覆されてるか分かれば, ある教室を除いても全ての教室が掃除できる ⇔区間内の全ての教室が2つ以上の区間に被覆されている ⇔区間内に,被覆数が1の教室が含まれない • 教室iの被覆数が1ならX[i]=1,そうでないならX[i]=0を記録した 配列Xに対し累積和配列Sを生成すると,ある区間に含まれる 被覆数1の教室の個数がO(1)で計算できるようになる • 各区間に対してO(1)でそれが解に含まれるかどうかが判定でき るようになり,判定にかかる計算量はO(M)となった. • 全体の時間計算量,空間計算量は O(N+M) となり満点 5
  11. 11. B問題 アルゴリズム動作例 6 • いもす法を行う 入力例 N=5,M=10 [1,4] [5,5] [5,6] [6,8] [9,10]
  12. 12. B問題 アルゴリズム動作例 7 • いもす法を行う 入力例 N=5,M=10 [1,4] [5,5] [5,6] [6,8] [9,10]
  13. 13. B問題 アルゴリズム動作例 8 • いもす法を行う 入力例 N=5,M=10 [1,4] [5,5] [5,6] [6,8] [9,10]
  14. 14. B問題 アルゴリズム動作例 9 • いもす法を行う 入力例 N=5,M=10 [1,4] [5,5] [5,6] [6,8] [9,10]
  15. 15. B問題 アルゴリズム動作例 10 • いもす法を行う 入力例 N=5,M=10 [1,4] [5,5] [5,6] [6,8] [9,10]
  16. 16. B問題 アルゴリズム動作例 11 • いもす法を行う 入力例 N=5,M=10 [1,4] [5,5] [5,6] [6,8] [9,10]
  17. 17. B問題 アルゴリズム動作例 12 • いもす法を行う →の方向に累積和を取るとこうなる 入力例 N=5,M=10 [1,4] [5,5] [5,6] [6,8] [9,10]
  18. 18. B問題 アルゴリズム動作例 13 • 被覆数が1の部分だけに着目 • 満点解法で述べた配列Xを生成 入力例 N=5,M=10 [1,4] [5,5] [5,6] [6,8] [9,10]
  19. 19. B問題 アルゴリズム動作例 14 • 被覆数が1の部分だけに着目 再度→方向に累積和を取り 満点解法で述べた配列Sを生成 入力例 N=5,M=10 [1,4] [5,5] [5,6] [6,8] [9,10]
  20. 20. B問題 アルゴリズム動作例 15 • 後は各区間について調べる • 被覆数1の教室を含むかどうか判定 • [1,4] → S[4] – S[0](=0とする) = 4なので× • [5,5] → S[5] – S[4] = 0なので○ • [6,8] → S[8] – S[5] = 2なので× • [9,10] → S[10] – S[8] = 2なので× • [5,6] → S[6] – S[4] = 0なので○ 入力例 N=5,M=10 [1,4] [5,5] [5,6] [6,8] [9,10]
  21. 21. ©AtCoder Inc. All rights reserved. C問題 エックスオア多橋君(解説スライド:三上) 1. 問題概要 2. 考察 3. 解法 4. アルゴリズム動作例 1
  22. 22. C問題 問題概要 • 辺に非負整数の重みがついたN頂点の木が与えられる. • 整数Xも与えられる. • aからbの単純パス上の辺の重みのxor和がXになるような (a,b)の組(a<b)の個数を求めよ. • 1≦N≦10^5 • 0≦X,辺のコスト≦10^9 2
  23. 23. C問題 考察 • 適当な頂点xを根に行ったdfsで,根からの経路の総和 xor を持っておくと嬉しい.なぜなら, パスa→bのxor値 = (a→xのxor 値) xor (x→bのxor 値) • が成り立つから. • 理由は a→x→bという経路の中で2回通る辺のコストは打 ち消し合うから 3
  24. 24. C問題 解法 • 適当な頂点からdfsを行い,根からの頂点iまでの単純パス のxor値x[i]が出現した回数をハッシュや平衡二分木(C++の map等)を用いて記録していく. • 各x[i]が出現した回数を加算する前に,X xor x[i] という値 が今までに出現した回数を答えに加算していけば良い. • 時間・空間計算量はハッシュを用いた場合 O(N) [コーナーケース] • X=0のとき,(x,x)を組として数えないように気をつけるこ と(求めるのはa<bとなる組の個数です). • 32bit整数だとオーバーフローします. 4
  25. 25. C問題 コーナーケース • X=0のとき,(x,x)を組として数えないように気をつけるこ と(a<bとなる組の個数です) • 答えは32bit整数だとオーバーフローします. • 別解はいくつかあります – データ構造をマージする一般的なテク(平衡二分木を マージしていくとO(nlog^2n)の時間計算量等で達成可 能) – オイラーツアーを構築して列の問題に帰着させる(本 質的にはこのスライドで述べた方法と同じ) 5
  26. 26. みんな仲良し高橋君 解説スライド担当: 森田 晃平(@yosupot)
  27. 27. 問題概要 • 点が2N+1個与えられる • x座標かy座標が同じ点はマッチング出来る • この点以外の点で完全マッチングが作れる かどう かを全ての点について判定 • N 100,000
  28. 28. 考察 • 実は、連結成分のサイズが偶数ならば必ず完全マッ チングが作れる
  29. 29. 考察 • マッチングを作っていく • もしどのマッチングにも含まれない点が2個以上存 在するならば、必ずマッチングが増やせることを証 明する
  30. 30. 例 • 以下のグラフで考える
  31. 31. 例 • まず使ってない点を2点選ぶ
  32. 32. 例 • この2点間をつなぐパスを用意する • パスにそってマッチングしていない点を動かしていく
  33. 33. 例 • パスにそってマッチングしていない点を動かしてい く
  34. 34. 例 • 動かす先の点のマッチングが、矢印と並行な場合
  35. 35. 例 • 動かす先の点のマッチングが、矢印と並行な場合
  36. 36. 例 • 動かす先の点のマッチングが、矢印と垂直な場合
  37. 37. 例 • 動かす先の点のマッチングが、矢印と垂直な場合
  38. 38. 例 • 動かす先の点のマッチングが、矢印と並行な場合
  39. 39. 例 • 動かす先の点のマッチングが、矢印と並行な場合
  40. 40. 例 • これでマッチングしてない点同士を繋げられた
  41. 41. 考察 • 連結成分のサイズが偶数ならば必ず完全マッチング が作れることがわかった • この問題は、点を消した時に偶数の連結成分だけが 残るような点を列挙する問題
  42. 42. 考察 • 最初の状態で連結成分が1個だけの場合を考えれば よい • 奇数の連結成分が複数あったら全部NG • 偶数の連結成分はなかったものと考えて良い • 点を削除して連結成分が増える、かつ増えた連結成 分のうち点が奇数個のものがある場合のみNG
  43. 43. 考察 • 点を削除した結果連結成分が増えるような点を関節 点と呼ぶ。これはO(V + E)で列挙可能(後述) • 消した結果出来た連結成分のサイズが奇数かどうか の判定も実はまとめてできる(後述) • ただ普通にグラフを作るとEは最悪θ(V^2)になる ので、減らさなくてはいけない
  44. 44. 考察 • O(V^2)本の辺を全て張る必要はない • もし一つの点からたくさん辺が伸びている場合は、 4方向毎に2番目に近い点までのみに辺を貼ればよ い • これで辺の本数はO(V)、これであとはO(V+E)で関 節点列挙すれば良い
  45. 45. 関節点列挙 • lowlinkという方法で列挙できます • dfs木を作り、頂点毎にordとlowというパラメー ターを計算する • ordはdfs木上での行きがけ順序 • lowは木の辺は降りることのみ可能、ただし後退 辺を最後に1度だけ登っても良い という条件下 での到達可能な頂点の中でのordの最小値
  46. 46. 関節点列挙
  47. 47. ord(行きがけ順序) 1 2 4 6 3 7 5
  48. 48. lowとは??? 1 2 4 6 3 7 5
  49. 49. lowとは??? 1 2 4 6 3 7 5 木の辺は降りることのみ可能 後退辺は最後に1度だけ登れる 到達可能な頂点の中でのordの最小値
  50. 50. lowとは??? 1,1 2 4 6 3 7 5 木の辺は降りることのみ可能 後退辺は1度だけ登れる 到達可能な頂点の中でのordの最小値 1から到達可能な頂点は? • 当然全ての頂点 • 頂点1のlowは1
  51. 51. lowとは??? 1,1 2,2 4 6 3 7 5 木の辺は降りることのみ可能 後退辺は1度だけ登れる 到達可能な頂点の中でのordの最小値 2から到達可能な頂点は? • 2,3,4,5 • 頂点2のlowは2
  52. 52. lowとは??? 1,1 2,2 4 6 3,3 7 5 木の辺は降りることのみ可能 後退辺は1度だけ登れる 到達可能な頂点の中でのordの最小値 3から到達可能な頂点は? • 3 • 頂点3のlowは3
  53. 53. lowとは??? 1,1 2,2 4,2 6 3,3 7 5 木の辺は降りることのみ可能 後退辺は1度だけ登れる 到達可能な頂点の中でのordの最小値 4から到達可能な頂点は? • 4,5,2 • 頂点4のlowは2
  54. 54. lowとは??? 1,1 2,2 4,2 6 3,3 7 5,2 木の辺は降りることのみ可能 後退辺は1度だけ登れる 到達可能な頂点の中でのordの最小値 5から到達可能な頂点は? • 5,2 • 頂点5のlowは2
  55. 55. lowとは??? 1,1 2,2 4,2 6,1 3,3 7 5,2 木の辺は降りることのみ可能 後退辺は1度だけ登れる 到達可能な頂点の中でのordの最小値 6から到達可能な頂点は? • 6,7,1 • 頂点6のlowは1
  56. 56. lowとは??? 1,1 2,2 4,2 6,1 3,3 7,1 5,2 木の辺は降りることのみ可能 後退辺は1度だけ登れる 到達可能な頂点の中でのordの最小値 7から到達可能な頂点は? • 7,1 • 頂点7のlowは1
  57. 57. 関節点列挙 • これがわかると何が嬉しいの? • 実は、関節点であるかは以下の条件を満たすかで判 定できる • (根)次数が2以上 • (根以外, vとする)子uの中にlow[u] ord[v]なる 頂点が存在する
  58. 58. 関節点列挙 • これがわかると何が嬉しいの? • 実は、関節点であるかは以下の条件を満たすかで判 定できる • (根)次数が2以上 • (根以外, vとする)子uの中にlow[u] ord[v]なる 頂点が存在する これはdfs木の性質から明らか
  59. 59. 関節点列挙 • これがわかると何が嬉しいの? • 実は、関節点であるかは以下の条件を満たすかで判 定できる • (根)次数が2以上 • (根以外, vとする)子uの中にlow[u] ord[v]なる 頂点が存在する こっちは?
  60. 60. 関節点列挙 • 関節点はdfs木上でどのような点になるか? • 頂点が消された時にその頂点の子のなかに、分離し てしまうものがあるならば関節点
  61. 61. 関節点列挙 この頂点について考える
  62. 62. 関節点列挙 消してみる
  63. 63. 関節点列挙 もしこの2つが分離したら関節点
  64. 64. 関節点列挙 後退辺があったら分離しない
  65. 65. 関節点列挙 こういう後退辺があっても分離しない
  66. 66. 関節点列挙 こういう後退辺があっても分離しない
  67. 67. 関節点列挙 v p u どういう後退辺があったら分離しないか? uの部分木のどこかと、 pとpの親のうちどこかをつなぐような 後退辺
  68. 68. 関節点列挙 v p u uから木を降りて、 後退辺を1回登ってpかpの親に行ければ よい どういう後退辺があったら分離しないか? uの部分木のどこかと、 pとpの親のうちどこかをつなぐような 後退辺
  69. 69. 関節点列挙 v p u uから木を降り後退辺を1回登っていける 頂点 このなかでもっとも上のものは? uから木を降りて、 後退辺を1回登ってpかpの親に行ければ よい
  70. 70. 関節点列挙 v p u → low(u)! uから木を降り後退辺を1回登っていける 頂点 このなかでもっとも上のものは? uから木を降りて、 後退辺を1回登ってpかpの親に行ければ よい
  71. 71. 関節点列挙 v p u つまり、low(u) < ord(v)か判定すれば良い 逆にlow(u) ord(v)なる子があったら関節点 → low(u)! uから木を降り後退辺を1回登っていける 頂点 このなかでもっとも上のものは? uから木を降りて、 後退辺を1回登ってpかpの親に行ければ よい
  72. 72. 関節点列挙 • ordとlowは全頂点まとめてO(V+E)で計算可能 • この条件下で関節点とは以下の条件を満たす頂点 • (根)次数が2以上 • (根以外, vとする)子uの中にlow[u] ord[v]なる頂点が存在する • これらもO(V+E)で計算可能 • さらに、これらを満たす子uのなかで(uの部分木のサイズ)が奇数にな るものがあったらNG • まとめてO(V+E)
  73. 73. lowを求める方法 • 具体的にlowはどう求めればいいのか? • 普通にdfsをする • 今頂点uにいて、辺(u, v)に注目してるとする • vをもう通ったならlow(u)=min(low(u), ord(v)) • 通って無いならlow(u)=min(low(u), low(v)) • これだけで求められる

×