1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AtCoder初心者振り返りメモ ABC216~

Posted at

216 C-問題

問題文
空の箱があります。髙橋君は以下の2 種類の魔法を好きな順番で好きな回数使えます。
・魔法 A :箱の中にボールを 1 つ増やす
・魔法 B :箱の中のボールの数を 2 倍にする
合計 120 回以内の魔法で、箱の中のボールの数をちょうど N 個にする方法を 1 つ教えてください。

ポイント
・ゴールから逆算して解いていく
「2倍する ⇔ 2 で割る」「1つ増やす ⇔ 1 をひく」

216C.py
# 入力 
N = int(input())

# 答えを格納する
ans = ""

while N:            # N がゼロになるまで逆算していく
    if N % 2 == 0:  # 2で割れるならBを先頭に入れる、割れない場合はAを先頭に入れる
        ans = 'B' + ans
        N //= 2
    else:
        ans = 'A' + ans
        N -= 1
print(ans)

217 C-問題

217C.png

ポイント
・index を合わせるためにリストの先頭を [0] で埋める
・リストのindex1から出力するときは、print(*Q[1:]) と記述する

217C.py
# 入力例
3
2 3 1

N = int(input())

# P[0] を埋めるため先頭に [0] をプラス
P = [0] + list(map(int, input().split()))
# P: [0, 2, 3, 1]

# リスト Q を用意
Q = [0] * (N + 1)

for i in range(1 ,N + 1):
    Q[P[i]] = i

# Q: [0, 3, 1, 2]

# 先頭は、不要なので インデックス1から出力する
print(*Q[1:])

答え
3 1 2

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?