ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

ABC077 D - Small Multiple

問題
提出コード
桁和関連の問題は本当に解ける気がしないです…方針が立ちません。解説を読んでもわからないので、数日寝かせていました。

解法

xについて、基本的には1を足すと桁和が1増加し(例外があります)、10倍すると桁和は据え置きです。
ということで、この2種類をそれぞれコスト1、コスト0の辺とみなして1からグラフを作成していくと、最終的に1からKの倍数への最短経路+1の最小値が答えとなります。
例外として、x=9等のような、1追加すると繰り上がりが発生して桁和が減少するパターンがありますが、これが起きるのはすべて1の位が9の場合であり、1を足すと必ず10の倍数になります。結局、xの1の位が9の場合は、\frac{x+1}{10}を10倍したパターンが最短経路になっているため、このようなxの場合に1を足す操作はあまり気にしなくてよいことになります。
ということで、あとはグラフ作成と最短経路を求めるだけなのですが、ここで
1Kのグラフの辺の張り方は、nK+1(n+1)Kの辺の張り方と一致しているため、Kで割った余りについてのみ考えてあげれば、K個の頂点のみを用いたグラフで答えを求めることができます。
ということで、ある数xに対して、10倍してあげる操作をコスト0、1追加する操作をコスト1として、頂点1から頂点0への最短経路を求めてあげれば、それに1追加したものが最終的な答えになります。