ABC129 E問題:Sum Equals Xor

問題. Sum Equals Xor

正整数  L が二進表記で与えられる.次の条件を満たす非負整数の対  (a, b) がいくつあるか求めよ.
 ・  a + b \le L
 ・  a \oplus b = a + b

制約 1 \le L \le 2^{100,001} L の先頭文字は必ず 1 )

解法1

2番目の条件である  a \oplus b = a + b となるための必要十分条件 a \wedge b = 1 となることである(ビットごとの排他的論理和の性質 - 忘れても大丈夫).
したがって, L 以下の非負整数  x に対して,  x を二進表記をしたときの立っているビット数を  k としたとき,2番目の条件である  x = a + b = a \oplus b を満たす非負整数の対  (a, b) の数は  2^k である.これは, x の二進表記と集合表記を対応させたときの  x の表す集合の分割の仕方の数と等しい.

 L のビット長を  n とする. L のビットが立っている上位ビットから  i 番目( 0-indexed )に対して, i より上位ビットは  L と等しく, i ビット目は  0 となる非負整数を考える.このとき, i より下位ビットがどのようになっていても必ず  L 以下となる.また, i より下位ビットで 1 が立っているビット数が  j となる非負整数の数は  \binom{n - i - 1}{j} となる.したがって, i ビット目より上位ビットで 1 が立っているビット数を  k とすると,条件を満たす非負整数の対の数は
   2^{k} \sum_{j = 0}^{n - i - 1} \binom{n - i - 1}{j} 2^{j} = 2^{k} 3^{n - i - 1}
となる.最後の変形は二項定理による.

 L のビットが立っている場所に対して上の値を計算して,その総和と 2 の  L のビットが立っているビット数乗の和が答えとなる.

計算時間 O(|L|)

 

解法2.動的計画法

解説 にある桁DPで実装した.

計算時間 O(|L|)

 

自力で解けたので満足して順位表を見ると625名も解けている.上位陣がたくさんは参加していないことを考えるとレベルが高くなっている.どうしよう.