1052水瓶.py


1052水瓶。py

[::-1]:逆回転bin():バイナリ表示

[問題の概要]


N個の水瓶
K個>いっぱいの水瓶.
この場合、同じ数の水が入っている水瓶が2つしか合わない.
店が追加で買う水瓶の最高価格を求めます.
ex)N=3,K=1の場合、3つの水瓶で1つ以上の水瓶を作成します.

[解答]


2の平方はK個の水瓶に移動することができる.これは、問題にバイナリ形式でアクセスする必要があることを意味します.bin(3) == 0b11 bin(3)[::-1] == 11b0 bin(n)[::-1].index('1') == 0"1"の最初のインデックスは0です.bin(n).count('1'):「1」の個数.すなわち,バイナリ数でどれだけの水瓶を製造できるかを決定できる.
ex)3->0 b 11->2^1リットル水瓶、2^0リットル水瓶で製造されていることが確認できます.
import sys
input = sys.stdin.readline
n, k = map(int, input().split())

cnt = 0
print((bin(n)[::-1].index('1')))
while bin(n).count('1') > k:
    a = 2 ** (bin(n)[::-1].index('1'))
    # 가장 말단의 이진수를 0으로 만들어주기 위해서 
    cnt += a
    n += a
print(cnt)