問題
B – 価格の合計
回答
ビット演算
>>
で1ビットずつずらしながら、&
でそのビットが立っているかを確認します。
n, X = map(int, input().split()) a = list(map(int, input().split())) ans = 0 for i in range(n): if (X >> i) & 1: ans += a[i] print(ans)
2で割った余り
2で割った余りでそのビットが立っているかを確認します。
n, X = map(int, input().split()) a = list(map(int, input().split())) x = X ans = 0 for i in a: q, r = divmod(x, 2) if r == 1: ans += i x = q print(ans)
ビット文字列
format()
や bin()
でビットの文字列に変換し、各桁を確認します。
str.format
(*args, **kwargs)
n, X = map(int, input().split()) a = list(map(int, input().split())) binary_X = format(X, 'b') while len(binary_X) != len(a): binary_X = '0' + binary_X ans = 0 for bit, price in zip(reversed(binary_X), a): if bit == '1': ans += price print(ans)
bin
(x)
n, X = map(int, input().split()) a = list(map(int, input().split())) binary_X = bin(X)[2:] while len(binary_X) != len(a): binary_X = '0' + binary_X ans = 0 for bit, price in zip(reversed(binary_X), a): if bit == '1': ans += price print(ans)