問題
Count Up Ikkyu
お気持ち
- 2進数っぽいけど、何か違う感じもあり…
- 結局本番中にまとめきれずに逃げ出しました。
- 公式解:1→0、9→1に置換した上で先頭に1を付けると、2以上の2進数になるよ!
- 流石にこのエスパーは無理…えー、これ、どういう練習?訓練?したら見抜けたんだろう…
- とりあえず本番後に、自分なりにAC通せた解法
- 1,9→1桁の2進数
- 11,19,91,11→2桁の2進数
- 111,119,191,199,911,919,991,999→3桁の2進数
- こんな感じで列挙していったら、logで何か上手いこと済みそうな感じ…?
- 後は二分木とか、書いてみたりも、良い、らしい…(要検討)
ソースコード
k = int(input())
bin_L = [2]
while True:
if bin_L[-1] > 10**9:
break
bin_L.append(bin_L[-1]*2)
accum_bin_L = [0]
for bin_num in bin_L:
accum_bin_L.append(accum_bin_L[-1]+bin_num)
tmp = 0
for i, a in enumerate(accum_bin_L):
if k <= a:
tmp = k - accum_bin_L[i-1]-1
break
print(bin(tmp)[2:].zfill(i).replace('1', '9').replace('0', '1'))