AtCoder Beginner Contest 238 D問題 AND and SUM
問題
提出解答
問題の概要
次を満たす非負整数 は存在するか? ただし, 2つの非負整数 に対して, でビットごとの論理積とする.
※ 個のマルチケース
制約
解法
まず, 和とビットごとの論理積を関連付けると等式として, 2つの非負整数 に対して,
が成り立つ. ここで, はビットごとの排他的論理和とする. よって, が成り立つならば, でなくてはならない. よって, であるから, だった場合は直ちに否定的に解決される.
とする. 今, となる が存在するか? ということになっているが, どちらもビットごとの演算なので, としてもよい.
をそれぞれ動かすと,
- のとき,
- のとき,
- のとき,
- のとき,
となる. よって, となる が存在することと, であることが同値である.
よって, 各ビットごとに かどうかを見れば良い.
今, 必要条件を述べたが, 各ビットごとに上の条件を満たすように取ることで, 十分性も示せる.
これでも正解できるが, を利用すれば, 全てのビットを一気に判定できる.