ABC077-D:Small Multiple

問題

正整数 K が与えられる。K の倍数の集合の中で桁和が最小になるとき、その桁和を求めよ。

考え方

任意の正整数は 1 からはじめて、

操作

  • ある数 t に +1 する
  • ある数 t に × 10 する

を繰り返し適応することで求められる。上記の操作をするとき +1 するときのみ桁和が +1 される。

K の倍数の集合は mod K でみたときに 0 になる数である。数を同一視するために mod K で考える。

1 からはじめて上記操作によって 0 (mod K) に遷移するときの最小のコストが求める解である。これは K 頂点のそれぞれから、コスト +1 で +1 の頂点に遷移する辺とコスト 0 で *10 (mod K) の頂点に遷移するグラフを考えると、頂点 1 から頂点 0 への最短経路を求めることと同一である。よってダイクストラ法で O(KlogK) で求めることができた。

Submission #3266978 - AtCoder Beginner Contest 077

ポイント

  • K の倍数 \Leftrightarrow  0 \equiv mod K
  • 数全体の集合で考える

類題