最大異或對

2021-09-24 09:12:57 字數 1124 閱讀 5163

acwing->143.最大異或對

在給定的n個整數a1,a2……an中選出兩個進行xor(異或)運算,得到的結果最大是多少?

輸入格式

第一行輸入乙個整數n。

第二行輸入n個整數a1~an。

輸出格式
輸出乙個整數表示答案。

資料範圍
1≤n≤105,

0≤ai<231

輸入樣例:
3

1 2 3

輸出樣例:
題解:異或+字首+字典樹

其實來說,乙個整數,是可以轉化成為乙個32位的二進位制數,而也就可以變成長度為32位的二進位制字串.

既然如此話,那麼我們可以這麼做,每一次檢索的時候,我們都走與當前ai的二進位制位的數值相反的位置走,這樣就可以讓xor值最大,如果說沒有路可以走的話,那麼就走相同的路.

時間複雜度:位數*n,所以是o(32 * n)

**如下:

#include

using namespace std;

const

int n =

1e6+10;

int a[n]

, trie[n *32]

[5], idx;

void

insert

(int x)

//建樹

}int

search

(int x)

//找最大的

else p = trie[p]

[u];

}return ans;

}int

main()

int res =0;

for(

int i =

0; i < n; i++

)res =

max(res,

search

(a[i]))

; cout << res << endl;

return0;

}

最大異或對

最大異或對 題解 這題採用的是01字典樹,一般這種異或問題都採用的是01字典樹樹解決。includeusing namespace std const int n 2e6 1 typedef long long ll ll a n int cnt 1 int tree 3 n 2 void inse...

最大異或對

1 對a i 異或 0 1 建立trie陣列。2 從trie數從根開始遍歷,找與a i 相反的數 3 找到當前不一樣的分支,並往前走。1 建trie 2 與輸入二進位制,選擇反方向異或,得到最大值 3 最後返回最大值7。在給定的n個整數a1,a2 ana1,a2 an中選出兩個進行xor 異或 運算...

最大異或對

在給定的n個整數a1,a2 an中選出兩個進行xor 異或 運算,得到的結果最大是多少?輸入格式 第一行輸入乙個整數n。第二行輸入n個整數a1 an。輸出格式 輸出乙個整數表示答案。資料範圍 1 n 105,0 ai 231 輸入樣例 31 2 3 include using namespace s...