
https://atcoder.jp/contests/abc147/submissions/13626753
https://atcoder.jp/contests/abc147/submissions/15303781
- 「集合nと集合mの片道は全部でn×m個」=「完全二部グラフ」=「辺の数はn×m個」

制約からが許されないので、ビット桁ごとに処理して計算量削減を目指す。XOR演算なので
と
をビット毎に分解したとき、片方0で片方1なら加算される。よって、
を決め打ちしてd桁目ビットが1、
から
までのd桁目ビット0の個数がpだったとき、
だけ加算されていく。
から
のd桁目ビット値の個数は累積和にすれば
になるので、最終的に計算量が
になる。
を決め打ちしてd桁目ビットが0のときも同様。
ただし、上記実装は面倒なので更に工夫したい。「集合nと集合mの片道本数」と「完全二部グラフの辺の本数」が同値なことに気づくことが出来れば、そもそもを決め打ちする必要がない。
から
におけるd桁目のビット0の個数をp、ビット1の個数をq、とするとd桁目の合計は
になる。計算量は
になる。