• CSU 1216 异或最大值


    求n个数里面,求两两异或的最大值

    直接来肯定会超时

    既然要异或最大值,那么两个数的二进制肯定是正好错开为好、、、为了能快速找到错开的数,确实有点难想到,用字典树,按二进制数插入,再一个一个在字典树里面找离他最远的即可。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    int n;
    int A[100010];
    int ch[20*100010][2],cnt;
    int val[20*100010];
    void inserts(int x)
    {
        int rt=0;
        for (int i=30;i>=0;i--){
            bool k=((1<<i)&x);
            if (ch[rt][k]==-1){
                ch[rt][k]=cnt++;
            }
            rt=ch[rt][k];
        }
        val[rt]=x;
    }
    int query(int x)
    {
        int rt=0;
        for (int i=30;i>=0;i--){
            bool k=((1<<i)&x);
            if (ch[rt][!k]!=-1){
                rt=ch[rt][!k];
            }
            else rt=ch[rt][k];
        }
        //cout<<val[rt]<<endl;
        return x^val[rt];
    }
    int main()
    {
        //int test=(1<<2)&3;
        //cout<<test<<endl;
        while (scanf("%d",&n)!=EOF)
        {
            cnt=1;
            memset(ch,-1,sizeof ch);
            for (int i=0;i<n;i++){
                  scanf("%d",&A[i]);
                  inserts(A[i]);
            }
            int ans=0;
            for (int i=0;i<n;i++){
                int res=query(A[i]);
                ans=max(ans,res);
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    

      

  • 相关阅读:
    Collections集合工具类排序
    集合的学习
    gitee使用方法
    vue 首屏优化
    vue 配置多个路由别名
    vue中的状态管理Vuex
    【Python】Pandas合并表格之(append, join , concat方法)
    elementui中提交表单自动刷新页面的问题
    滴滴实习面试题
    CSS 日常积累
  • 原文地址:https://www.cnblogs.com/kkrisen/p/3962979.html
Copyright © 2020-2023  润新知