1 条题解

  • 0
    @ 2026-10-25 21:01:56

    思路

    逐二进制高位优先相反分支,数值小于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

    信息

    ID
    1521
    时间
    1000ms
    内存
    64MiB
    难度
    普及
    标签
    递交数
    1
    已通过
    1
    上传者