mini notes

競技プログラミングの解法メモを残していきます。

yukicoder No.939 and or (★2)

問題:No.939 and or - yukicoder

解答:#470215 (C++14) No.939 and or - yukicoder

解法:AとBのビットを先頭から見てゆくとき、Aが1でBが0となるような桁があると、X & Y = A、X | Y = Bの条件から不適。よって AとBのビットが相違しているとき、必ずAが0、Bが1となっている。

X, Yの組み合わせの数は、AとBでビットが相違(A:0, B:1)している桁がn箇所あるとき、2n-1個である。最初にAとBでビットが相違する桁ではX:0, Y:1とし、それ以降相違する桁はXとYで(X:0, Y:1), (X:1, Y:0)のどちらかを選べばよい。