1 条题解
-
0
思路
逐二进制高位优先相反分支,数值小于2^31,不能按数值最大两个选;n=1依范围输出0。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin>>n;vector<unsigned>a(n);vector<array<int,2>>tr(1);tr.reserve(n*31+1);for(auto &x:a){cin>>x;int v=0;for(int k=30;k>=0;k--){int b=x>>k&1;if(!tr[v][b]){tr[v][b]=tr.size();tr.push_back({});}v=tr[v][b];}}unsigned ans=0;for(unsigned x:a){int v=0;unsigned value=0;for(int k=30;k>=0;k--){int b=x>>k&1;if(tr[v][b^1]){value|=1u<<k;v=tr[v][b^1];}else v=tr[v][b];}ans=max(ans,value);}cout<<ans<<'\n';}
- 1