ABC465 D - X to Y
XからYへ
考え方
数式をちゃんと言語化できれば非常に単純な問題。
$\lfloor x/K \rfloor$ は、$K$ で割って切り捨て。
これが仮に $K=10$ だったら、普通に一の位を消す操作になる。
つまり、$K=10$ の場合に言っていることは、以下のようなことである。
- 末尾の数字を $1$ つ消す操作ができる
- 末尾に好きな数字を $1$ つつける操作ができる
- $X$ を $Y$ に変えるのに最少何回かかるか?
こう考えると $K=10$ の場合答えは明らか。
$X$ と $Y$ で、先頭からの数字列が何桁共通しているかを調べればよい。
$X$ の不一致部分を全部削除して、$Y$ の不一致部分を全部追加する、その操作数の和が答え。
では、$K$ が $10$ 以外の数だったらどうするのか?
答えは単純で、$K$ 進法で扱えばいいだけである。
$1$ テストケースあたりの計算量は $O(\log_K(X+1)+\log_K(Y+1))$ である。
入力例1での動作
入力を受け取る。
$1$ つめのテストケースのみを見る。
x: 11
y: 9
k: 3
$11$ と $9$ を $3$ 進法で表すと、次のようになる。
11: 102
9: 100
先頭の 10 までが共通している。
したがって、102 の末尾の 2 を削除し、その後 0 を追加すればよい。
実際の値では、次の $2$ 回の操作になる。
11 -> 3 -> 9
102 -> 10 -> 100 (3進法)
よって、答えは $2$ である。
注意点
$X$、$Y$、$K$ は、int 型からはみ出る。
long long 型を用いること。
また、0 を $K$ 進法変換したとき、数字列を空として扱う。
これにより、0 から正の整数へ移る場合の回数を正しく数えられる。
別解
特になし。