01BFSで解く、D - Small Multiple (arc084_b)

  • Quiz
  • Submit
  • その他
    • 他の人の解答を見ていたら、ダイクストラをライブラリで持っていて適用して解いている人が多かった
  • 発想
    • 「桁の和」は、数字Xを作る時に1から出発して「+1(コスト1)」「x10(コスト0)」で作った時のコストの和+1である
    • 例:123は、1->10★11★12->120★121★122★123(星部分がコスト1)
    • よってコスト5で123に到達でき、桁和はそれ+1の6で一致する

ポイント

  • グラフ問題でとらえる
    • 1を足すのはコスト1のエッジ
    • 10倍するのはコスト0のエッジ
  • 無限にノードがあるが、パターンからmod Kしてよいと気づく
    • (というか、そういう性質がないと最適性が言えないので、あるはずと考えて探すのが良さそう)

01BFS

  • 両端キューを使った幅優先探索。コストが0の時はqueueの左から入れ、コストが1の時は右から入れることでコスト0を優先して処理する
  • エッジのコストが0, 1の時はこれで十分なのでこれで書いていこう
    • コンテスト中に定型アルゴリズムを書くのは、理解した後に減らしていこう
  • 参考にしたサイト:https://betrue12.hateblo.jp/entry/2018/12/08/000020
  • 計算量 O(E)
  • ダイクストラで間に合うならダイクストラを貼り付けてもいい

ノート

01BFS類題

012BFS

  • 2024/02/06
  • chokudaiさんによると012BFSというのもあるらしい