在給定的n個整數a1,a2……an中選出兩個進行xor(異或)運算,得到的結果最大是多少?
輸入格式
第一行輸入乙個整數n。
第二行輸入n個整數a1~an。
輸出格式
輸出乙個整數表示答案。
資料範圍
1≤n≤105,
0≤ai<231
輸入樣例:
31 2 3
輸出樣例:
3直接暴力的複雜度是n²肯定是要超時的 ,知道要用字典樹那麼就把每個數化成二進位制儲存啦,因為是異或運算,相同為0不同為1 ,所以在每個節點要優先向相反位走,相反位沒路了再向相同為走,為了實現最大化要從高位向低位走(wa了好幾次!!!)
#include#includeusing namespace std;
const int maxn=1e5+100;
int ed[maxn*32][5],idx=1;//理論上乙個數有32位 實際用不到maxn*32
void insert(int x)
}int query(int x)
cout
}
最大異或對 字典樹
在給定的n個整數a1,a2 an中選出兩個進行xor 異或 運算,得到的結果最大是多少?輸入格式 第一行輸入乙個整數n。第二行輸入n個整數a1 an。輸出格式 輸出乙個整數表示答案。資料範圍 1 n 105,0 ai 231 輸入樣例 31 2 3 輸出樣例 3 基於貪心的思想 異或是一種不進製加法...
字典樹 最大異或對
分析程式 最大異或對,就是給出一堆數,然後在這一堆數中選擇兩個數,使得異或後結果最大。所涉及到的知識點有 字典樹,二進位制的思想 這樣寫不出意外是會超時的,因為這樣看的話,他的時間複雜度是o n n 然後題中給出的資料是10的五次方。所以說這樣的話,需要執行10的十次方次操作,而機器在一秒中只能執行...
最大異或對 字典樹)
143.最大異或對 在給定的n個整數a1,a2 an a1,a2 an 中選出兩個進行xor 異或 運算,得到的結果最大是多少?輸入格式 第一行輸入乙個整數n。第二行輸入n個整數a 1 a1 an an 輸出格式 輸出乙個整數表示答案。資料範圍1 n 105 1 n 10 5,0 ai 231 0 ...