字典樹 最大異或對

2022-07-16 13:42:10 字數 613 閱讀 5216

給你\(n\)個數,從中選兩個數進行異或運算,得到結果最大是多少

一道沒寫過就不知道怎麼寫的套路題

剛開始可以用貪心分析,也就是說如果兩個數的高位能夠盡可能的大那麼我們就盡可能的大就好了,也就是說兩個數的二進位制數在同一位不同,此時最大,那麼怎樣很快的滿足呢?我們發現可以將二進位制數轉化到trie上面解決,當前是1就盡可能走0,當前是0就盡可能走1,那這個問題就很簡單了,建個trie數直接跑就好了

//#define fre yes

#include #include const int n = 100005;

struct node trie[n * 30];

int a[n], idx;

void insert(int x)

}int search(int x) else rt = trie[rt].son[id];

} return ans;

}int main() for (int i = 1; i <= n; i++) ans = std::max(ans , search(a[i]));

printf("%d\n", ans);

return 0;

}

最大異或對 字典樹

在給定的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 ...