E - Increasing Numbers Editorial by Nachia

別解

公式解説とは異なる解法に対して正当性を説明します。

増加的数を \(K\) 個足す代わりに、すべての桁が \(1\) である整数(レピュニット数)を \(K^{\prime}=9K\) 個足すと考えます。このとき、 \(N\)\(K^{\prime}\) 個のレピュニット数の和で表せる条件は、十分大きい値 \(Z\) と単調非増加の非負整数列 \(a _ 0,a _ 1,\ldots ,a _ Z\) であって \(K^{\prime}\geq a _ 0\) を満たすものを用いて

\[\sum _ {n=0}^Z a _ n10^n\]

と表せることです。

\(K^{\prime}\) の値を二分探索します。以下は、指定した \(K^{\prime}\)\(N\) を構築できるかを判定する方法です。

\(n=0\) から順に、「 \(N\) の下位 \(n\) 桁に一致させるような構築において、 \(a _ n\) の値として考えうる最大の値」として \(A _ n\) を計算します。この過程で \(A _ n\geq 0\) を満たせなくなったら、 \(K^{\prime}\) を大きくしないと \(N\) が得られないことが分かります。

\(N\) のすべての桁を一致させた後、 \(a _ n=A _ n\) とすると \(N\) 以上の値の構築方法が得られます。構築される値が \(N\) よりも大きい場合、 \(N\) のすべての桁よりも大きい桁が不一致ですが、これは \(a _ 0,a _ 1,\ldots ,a _ Z\) の後ろから貪欲に調整することで \(N\) に一致させることができます。

posted:
last update: