【Trie】最大异或对(ybtoj Trie-2)
生活随笔
收集整理的這篇文章主要介紹了
【Trie】最大异或对(ybtoj Trie-2)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
正題
ybtoj Trie-2
題目大意
給你n個數(shù),選擇2個,使其異或值最大
解題思路
對于每個數(shù)的二進(jìn)制建立Trie,然后每個數(shù)在Trie中搜索,每次盡量走不同方向
代碼
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #define N 100100 using namespace std; int n, x, w, ans, to[N*32][2]; void insert(int x) {int now = 0, y;for (int i = 30; i >= 0; --i){y = (x>>i)&1;if (!to[now][y]) to[now][y] = ++w;now = to[now][y];}return; } int ask(int x) {int ans = 0, now = 0, y = 0;for (int i = 30; i >= 0; --i){y = (x>>i)&1^1;//走不同方向if (to[now][y]) ans += 1<<i;else y ^= 1;now = to[now][y];}return ans; } int main() {scanf("%d", &n);for (int i = 1; i <= n; ++i){scanf("%d",&x);ans = max(ans, ask(x));insert(x);}printf("%d", ans);return 0; }總結(jié)
以上是生活随笔為你收集整理的【Trie】最大异或对(ybtoj Trie-2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样用啤酒洗头 如何正确的用啤酒洗头
- 下一篇: 【Trie】最长异或路径(ybtoj T