[Python] ABC014 B

問題

B – 価格の合計

回答

ビット演算

>> で1ビットずつずらしながら、& でそのビットが立っているかを確認します。

Python ビット演算 超入門

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で割った余りでそのビットが立っているかを確認します。

divmod(ab)

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)