首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

BestCoder ZYB loves Xor I:Trie 樹統計低位異或和

     編輯:關於C++

題目大意

給定長度 n (≤5×10⁴) 的數組 A,元素值 < 2²⁹。求所有有序數對 (i,j) 的 lowbit(A_i xor A_j) 之和模 998244353。lowbit(x) 為 x 二進制最低位 1 所代表的值(2^k),lowbit(0)=0。

關鍵轉化

lowbit(x xor y) 等於 x、y 二進制最低不同位的權值。即從最低位向高位掃描,第一個 x、y 不同的位位置 k,貢獻 2^k。
將所有數插入二進制 Trie(從低位向高位,共 29 層)。對每個數 x,在 Trie 中查找:從低位開始,若當前位為 b,優先走 1-b 分支(不同),該分支下所有葉子與 x 此位首次不同,貢獻 cnt * (1<;然後繼續走 b 分支(相同),尋找更高位的首次不同。若走到根仍全同,則 x=y,貢獻 0。

Trie 節點結構

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved