ABC049

command
v0.0.0-...-23e9799 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 15, 2021 License: MIT Imports: 7 Imported by: 0

README

ABC049過去問感想

新しく設定したneovimで解いたのでかなり時間がかかってしまった。

  • A問題は特になし。
  • B問題は文字列処理っぽいが単に1行を2回出力するだけなのでとても簡単。
  • C問題は場合分けで何とか解けると思ったがWAが排除できそうになかった。
    • 単語全体が他の単語の接頭辞になっていると判別が難しくなってしまう。
    • 逆向きに処理することで見通しが良くなる、というのは文字列処理の中の代表的パターンの1つと思われるので、よく覚えておきたい。
  • D問題はUnionFind木を使うというネタバレがあっても解けなかった。
    • しかも解答PDFを読んだあと実装しても、依然としてサンプルが通らないという体たらく。
    • 結局、UnionFindアルゴリズムについてより深く理解するきっかけとなったのは良かった。

Union Findについて

各種関数の引数に異なる xxParents というスライスを渡す

これによって、2種類の異なるネットワークについて連結成分を管理することができる。

root 関数について

今回は、各ノードを unite した後、能動的にmain関数から root 関数を実行する必要があった。

UnionFind木を構築する中で、必ずしもあるノードの親と根が一致するとは限らないことに注意(当たり前だが)。 same 関数で根ノードの一致を判定する中で、経路圧縮が行われ、parents スライスの中身も根ノードで揃えられていく。

今回の問題で、root 関数によって根ノードを調べれば、連結成分である限り確実に一致する こと(イメージ)を頭に叩き込むこと。 (根ノードの一致性をチェックすることで同一グループか(連結か)どうかを判定しているのだから、ごくごく当たり前なのだが)

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL