D - Money in Hand Editorial by Kiri8128

bit 演算を使った実装

考え方は 公式解説 と同じです。 実装の際、 Python などの多倍長整数の bit 演算を使うとより簡潔に書くことができます。つまり、 \(x\) 番目のビットが \(1\) であれば支払える、そうでなければ支払えない、というように情報を持たせます。 より詳しい説明は この記事 の「bit 演算を用いる方法」に書いているので参考にしてください。本問においても「左右反転」を使うと無駄な部分を省略することができます。

実装例

N, X = map(int, input().split())
s = 1 << X
for _ in range(N):
    a, b = map(int, input().split())
    for _ in range(b):
        s |= s >> a
print(“Yes” if s & 1 else “No”)

提出コード

posted:
last update: