AcWing 143 最大異或對(Trie)

2022-09-14 12:15:06 字數 954 閱讀 2367

題目大意:從n個數中選出兩個數異或,求最大的異或值。1≤

n≤105

'>1≤n≤10^50≤

ai<231

'>0≤ai<2^ 311≤

n≤105

'>0≤a

i<231

'>題解:1≤

n≤105

'>0≤a

i<231

'>首先考慮暴力的寫法

for(int i=1;i<=n;i++)

}

考慮用資料結構優化,對於每個列舉到的數,找到與它異或結果最大的數。

假設第i個數001101101那麼它與110010010異或,結果是最大的,從第i個數的高位開始看,盡量從剩下的n-1個數中找高位與它二進位制相反的。

#include#include

#include

#include

using

namespace

std;

const

int n=100000+10

;int

n,cnt;

int t[n][2

];int

a[n];

long

long

ans;

inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}void insert(intx)}

long

long slove(int

x)else p=t[p][(x>>i)&1

]; }

return

res;

}int

main()

for(int i=1;i<=n;i++)

cout

}

AcWing 143 最大異或對

題目描述 在給定的n個整數a1,a2 an中選出兩個進行xor 異或 運算,得到的結果最大是多少?輸入格式 第一行輸入乙個整數n。第二行輸入n個整數a1 an。輸出格式 輸出乙個整數表示答案。資料範圍 1 n 10 5,0 ai 2 31 輸入樣例 3 1 2 3輸出樣例 3分析 本題要求我們從n個...

Acwing143 最大異或對

用乙個tire樹來存下n個數的二進位制形式的01串,串的長度是31,因為每個數最多為2 31所以,取31,然後根據異或的特性,列舉一下所有的數,取這個數的反碼,去樹中尋找盡可能和反碼向同的路徑,並且記錄下路徑過程的異或值即可 include include include using namespa...

acwing 143 最大異或對

題面 在給定的n個整數a1,a2 an a1,a2 an a1,a2 an中選出兩個進行xor 異或 運算,得到的結果最大是多少?輸入格式 第一行輸入乙個整數n。第二行輸入n個整數a 1 a1 a1 a n an an。輸出格式 輸出乙個整數表示答案。資料範圍1 n 105 1 n 105 1 n ...