ABC238_D – AND and SUM

プログラミング

ABC238_D – AND and SUM

問題

D - AND and SUM
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

提出

Submission #45055842 - Monoxer Programming Contest 2022(AtCoder Beginner Contest 238)
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

3回目くらいで解けた

以下、解法を書く。

$x+y=s$を論理式を使ってかくと、$(x XOR y)+2(x AND y) = s$となることを使う。
式変形の意図を書いてみる。
$x XOR y $は繰り上がりなしで考えた場合の和を表し、$2(x AND y)$は繰り上がりを表す。
$(x AND y)$は$x,y$が$1$の時のみ$1$なので、次の桁に繰り上がりがあることを表す。

次に上記の式に$x AND y = a$を代入してみると、以下ののようになる。
$$(x XOR y)+2a = s$$
$$(x XOR y)= s-2a$$

ここで、$x,y$は非負整数なので、$(x XOR y )=>0$であり、$s-2a=>0$となる必要がある。
つまり、$s-2a<0$の場合は”No”が答えになる。

$(x XOR y )=>0$の時、$(x XOR y)= s-2a$と$x AND y = a$が同時に成り立てば”Yes”になり、それ以外は”No”になる。
$i$番目のビットを確認することを考えと、以下の表のようになる。

$x_i XOR y_i$ $x_i AND y_i$ x_i y_i
0 0 0 0
0 1 0 or 1 1 or 0
1 0 1 1
1 1 × ×

両方$1$の時の場合のみ、$x_i,y_i$は存在しない。
全てのビットを同時に計算することを考えると、$(x_i XOR y_i) AND (x AND y)$が0の時”Yes”になる。

コメント

タイトルとURLをコピーしました