スパークリング黒ココア/RWS 2022 3. Count Up Ikkyu

Created Thu, 29 Dec 2022 Modified Tue, 26 Sep 2023 09:13:30 +0000

問題

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'))