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を論理式を使ってかくと、(xXORy)+2(xANDy)=sとなることを使う。
式変形の意図を書いてみる。
xXORyは繰り上がりなしで考えた場合の和を表し、2(xANDy)は繰り上がりを表す。
(xANDy)x,y1の時のみ1なので、次の桁に繰り上がりがあることを表す。

次に上記の式にxANDy=aを代入してみると、以下ののようになる。
(xXORy)+2a=s
(xXORy)=s2a

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

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

xiXORyi xiANDyi x_i y_i
0 0 0 0
0 1 0 or 1 1 or 0
1 0 1 1
1 1 × ×

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

コメント

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