問題
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)