概要
整数が書かれた $N$ 個のボールがある。 $i$ 個目のボールには $A_i$ が書かれている。
これらのボールからいくつかのペアを作り、各ペアに書かれた整数の和が 2 べきとなるようにしたい。最大でいくつのペアを作れるか求めよ。
制約
- $1 \leq N \leq 2 \times 10^5$
- $1 \leq A_i \leq 10^9$
考察
ボールに書かれた最大の整数 $X$ に注目する。実は、 $X$ とペアにできる整数は高々 1 つしか存在しない ことが示せる。
証明
$X \lt 2^p$ を満たす最小の整数 $p$ を取る。このとき $2^p - X$ は $X$ のペアの(唯一の)候補となる。
他のペア候補は $p$ より大きい整数 $q$ によって $2^q - X$ と表される。このとき、
$$ 2^q - X \geq 2^{p + 1} - X = 2^p + (2^p - X) \gt 2^p \gt X $$
より $2^q - X \gt X$ となる。そして $X$ の最大性より、 $2^q - X$ が書かれたボールは存在しない。$\square$
もし $X$ の唯一のペア候補が書かれたボールが存在しなければ、このボールは使えないので無視していい。
一方で $X$ とペアになれるボール $i$ が存在すれば、それと組むのが最善となる。 最適解でボール $i$ がペアを組んでいる場合、このペアを解除して $X$ が書かれたボールとペアにすれば、再び最適解が得られるためである。
実装例
提出 #3853555 - AtCoder Grand Contest 029
|
|