いろんな人が で解いているので で解けるんじゃない?という主張をします。(実際早くはなりません(元々がかなり早いので...))
そして当然constexprが乗ります!コンパイル時 で実行時は出力するだけです arc099.contest.atcoder.jp 実際明快でわかりやすいC++の形です(第1144項目のすぬけ数でを超えるみたいです?)
本題
すぬけ数について、まずすぬけ関数 を定義してみます。
とするのが自然で、この関数の極小値について考えていきます。
について、 か が成り立ち、 のとき必ず です。
のときは、 を変形すると となってこれは です。
次に、 が成り立つ のみに定義域を絞ったときの の極小値について考えます。
定義域は なので、について考えます。
すると、同様に考えて のときとそうでないときに分けられます。
以下 、…と考えていくことができます。
ここで🎄気🎄になるのが、この論理の桁が上がっていくステップの中で、すぬけ数はどこで 側を満たすようになるのかということです。
よく考えると を満たすようになるところはすぬけ数のindexについて単調増加です。
つまり、あるところで が極小値でなくなったらこれから先は の形の極小値しか存在しないということです。
これを利用すると、「次の 型の極小値候補が極小でない」ときに「次の桁まで9を詰める」ことを決意すればいいことがわかります。
計算量ですが、次の 型が極小でないときだけ一回余分に計算しているので、(何も考えずに評価していますけど)たぶん( な)定数倍だけ余分な計算をしていると思います。
なのでたぶんこの答えは です。
おわりです