acwing-143. 最大异或对(Trie+异或)「建议收藏」

acwing-143. 最大异或对(Trie+异或)「建议收藏」在给定的 N 个整数 A1,A2……AN 中选出两个进行 xor(异或)运算,得到的结果最大是多少?输入格式第一行输入一个整数 N。第二行输入 N 个整数 A1~AN。输出格式输出一个整数表示答案。数据范围1≤N≤105,0≤Ai<231输入样例:31 2 3输出样例:3#include<bits/stdc++.h>using namespace std;const int N = 31e5 + 10;int trie[N][2],ctx,cnt[N];

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在给定的 N 个整数 A1,A2……AN 中选出两个进行 xor(异或)运算,得到的结果最大是多少?

输入格式
第一行输入一个整数 N。

第二行输入 N 个整数 A1~AN。

输出格式
输出一个整数表示答案。

数据范围
1≤N≤105,
0≤Ai<231

输入样例:
3
1 2 3
输出样例:
3
#include<bits/stdc++.h>
using namespace std;
const int N = 31e5 + 10;
int trie[N][2],ctx,cnt[N];
void insert(int x){ 
   
    int p = 0;
    for(int i = 30;i >= 0;i --){ 
   
        int a = (x >> i & 1);
        if(!trie[p][a])trie[p][a] = ++ ctx;
        p = trie[p][a];
    }
    cnt[p] ++;
}
int query(int x){ 
   
    int sum = 0;
    int p = 0;
    for(int i = 30;i >= 0;i --){ 
   
        int a = (x >> i & 1);
        if(trie[p][!a]){ 
   
            p = trie[p][!a];
            sum += (1 << i);
        }else { 
   
            p = trie[p][a];
        }
    }
    return sum;
}
int a[N];
int main(){ 
   
    int n;
    cin>>n;
    int x;
    for(int i = 0;i < n;i ++){ 
   
        cin>>a[i];
        insert(a[i]);
    }
    int res = 0;
    for(int i = 0;i < n;i ++){ 
   
        res = max(res,query(a[i]));
    }
    cout<<res<<endl;
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169098.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月10日 下午9:36
下一篇 2022年8月10日 下午9:46


相关推荐

  • Mybatis调用存储过程

    Mybatis调用存储过程调用存储过程 mybatis 调用存储过程时需要指定 statementTyp CALLABLE 这样 Mybatis 内部中调用 sql 语句时将采用 CallableStat 而 CallableStat 内部将使用 CallableStat 来调用存储过程 如果存储过程是有参数的 需要指定 mode 属性 可选值有 IN OUT 和 INOUT 当 mode 为 OUT

    2026年3月19日
    2
  • static使用方法小结

    static使用方法小结

    2021年12月14日
    50
  • STM32之sprintf函数[通俗易懂]

    STM32之sprintf函数[通俗易懂]单片机中Sprint函数:说明1:使用该函数时必须包含stdio.h头文件,否则容易卡死程序说明2:sprintf与printf函数的区别:二者功能相似,但是sprintf函数打印到字符串中(将数值转换成对应字符串形式,就是变换成ASCALL码),而printf函数打印输出到屏幕上。在单片机中将数值转换成字符串是sprintf函数最广的用途。Sprint函数具体形式:intsp

    2022年6月29日
    36
  • YUV简介

    YUV简介介绍YUV的相关概念。YUV444YUV422YUV420。YUV与RGB。

    2022年7月16日
    20
  • caffee 安装教程

    caffee 安装教程参考网站 http www th7 cn system lin 201508 123485 shtml 安装依赖库 sudoapt getinstallli devlibleveld devlibsnappy devlibopencv devlibhdf5 serial devprotobuf compilersudo get

    2026年3月19日
    1
  • 少儿编程100讲轻松学python(七)-pycharm怎么删除项目

    少儿编程100讲轻松学python(七)-pycharm怎么删除项目前言 os 模块和 shutil 模块是 Python 处理文件 目录的主要方式 os 模块提供了一种使用操作系统相关功能的便捷方式 shutil 模块是一种高级的文件 目录操作工具 文件的处理 os 模块提供了一些便捷功能来使用操作系统资源 比如读取资源目录下的文件 在命令行查看某路径下文件的所有内容等 获取系统类型对代码进行兼容性开发以适应不同操作系统时通过操作系统类型进行判断就可以轻松解决 importosimpo os name 返回 nt 代表 Windows posix 代表 L

    2026年3月27日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号