チャンパーノウン定数自体は既出のネタ(例: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を回避できる。