最大异或对 The XOR Largest Pair

题目来自洛谷网站:

思路:

两个循环时间复杂度太高了,会超时。
我们可以先将读入的数字,插入到字典树中,从高位到低位。对每个数查询的时候,题目要求是最大的异或对,所以我们选择相反的路径,构造最大异或值。

代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 100010;

int n;
int arr[N];
int ch[N*31][2], idx;//idx给树上每个节点一个编号

void trie(int x){
    int p = 0;//p是当前走到了哪个节点编号
    for(int i = 30; i >= 0; i--){
        //取出最后一个数字
        //判断0 1
        int j = x>>i&1;
        if(!ch[p][j]) ch[p][j] = ++idx;
        p = ch[p][j];
    }
}

int query(int x){
    int p = 0, res = 0;
    for(int i = 30; i >= 0; i--){
        int j = x>>i&1;
        //相反的一边
        if(ch[p][!j]){
            res += 1<<i;
            p = ch[p][!j];
        }
        else p = ch[p][j];
    }
    return res;
}

int main(){
    cin >> n;
    for(int i = 1; i<=n; i++){
         cin >> arr[i];
         trie(arr[i]);
    }
    int ans = -1;
    for(int i = 1; i<=n; i++){
        ans = max(ans, query(arr[i]));
    }
    cout << ans << endl;
    return 0;
}
相关推荐
Feynman’s boom6 小时前
PDF解析复盘
数据库·人工智能·算法·pdf解析
郝学胜-神的一滴6 小时前
《C++11 工程级应用01:告别冗长类型,开启简洁高效编码新时代》深度解读
开发语言·c++·算法·软件开发·系统设计
学习中.........8 小时前
Transformer 训练资源估算:以 CS336 GPT-2 XL 配置为例
人工智能·python·算法·机器学习·自然语言处理
Navigator_Z13 小时前
LeetCode //C - 1206. Design Skiplist
c语言·算法·leetcode
码行山野赴时序归途13 小时前
三道经典数组题:从暴力到最优的算法思维
c语言·开发语言·数据结构·算法·leetcode
徐小夕14 小时前
3分钟从想法到Agent上线:我们开源了一款AI可视化工作流“IDE”
前端·算法·github
sel_915 小时前
【强化学习】Hands-on Modern RL项目实践|OPD 算法完整解析
人工智能·深度学习·算法·机器学习·语言模型
Navigator_Z15 小时前
LeetCode //C - 1209. Remove All Adjacent Duplicates in String II
c语言·算法·leetcode
ShineWinsu17 小时前
对于 C++:C++14中从变量模板、泛型 Lambda 到并发与字面量的解析
c++·算法