https://atcoder.jp/contests/abc098/tasks/arc098_b
D - XOR Sum 2
が成り立つかどうかを2bitとかで調べればわかるが、2進数で考えてどこかの桁でくり上がりが発生すると、になる。また、が成り立つなら、その部分列についても繰りあがりは発生していないわけだから、条件を満たすの組の個数はしゃくとり法で数え上げられる。
今回の問題では、必ず使う必要があるわけではないが、であること(とXORは可換、結合的であること)を用いると、が累積和の考えを用いて計算できる(実装1)。
実装2は、解説にあるように、各桁の1の個数について累積和で計算しておいて、について、すべての桁の1の個数が1個以下なら繰り上がりなし、そうでないなら繰り上がりが発生することを使って数えている。
実装1
実装2