チャンパーノウン定数自体は既出のネタ(例:Project Euler 40)なので、基本的には以下の方針で良い(CodeIQコード銀行「n番目の数字は?」(答案)のコメントより)。
1 2 3 4 5 6 7 8 |
|
これで、ビルトイン多倍長整数を使えば10**1000
程度まではACできる。ただし、今回は入力が非常に大きいため、下位から順番に処理すると多倍長演算が容易にTLEを招いてしまう(解答例のif false
の一部)。
まず、この1*1*9 + 2*10*9 + 3*100*9 + ...
を高速に求めることを考える。
1 2 3 4 |
|
といった変形により、Si = i*10**i - (10**i-1)/9
と定式化できる。これを用いて、digitsを2分探索するか上位から探索するかする。これでTLEを回避できる。