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: