Ex - Multiply or Divide by 2 Editorial by Kiri8128


整数 \(n\)\(n=2^x\times y\)\(y\) は奇数)の形で書きます。ただし \(n=0\) のときは \((x,y)=(0,0)\) とします。各操作で \(y\) が増えることはないので、 \(y\) が大きいものから貪欲に決めていけば良いです。

同じ \(y\) の中では、\(A\)\(B\) それぞれで \(x\) が大きいものからマッチングします。もし \(B\) の方が余ったら失敗です。 \(A\) の方が余ったら、 \(2^x\times y\) に対して \(x+1\) 回操作をして、より小さい \(y\) のグループに追加します。

\(y\) を Priority Queue で管理することにより、 \(O(N\log N \log A_{max})\) で実装できます。

posted:
last update: