zoukankan      html  css  js  c++  java
  • The XOR Largest Pair (01Trie)

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

    Input

    第一行一个整数 N

    第二行 N 个整数 Ai

    Output

    一个整数表示答案。

    Example

    样例输入

    5

    2 9 5 7 0

    样例输出

    14

    Hint

    对于 100%100% 的数据,1≤N≤105,0≤Ai<231。

    01Trie,把每个数转化成32位的二进制串,insert函数不变,search函数里查找的时候优先沿着与带查找字符串当前位相反的字符指针向下访问,如果p为空的话就只能退而求其次访问与当前位相同的字符指针。

    两个小坑:trie数组第一维一定要开的足够大,search函数里每一重循环记得保留原始的p(便于处理为空的情况)。

    #include <bits/stdc++.h>
    using namespace std;
    int n,trie[100005*31][2],tot=1,ans=0;
    vector<string>v;
    int fpow(int a,int b)
    {
        int ans=1;
        for(;b;b>>=1)
        {
            if(b&1) ans=ans*a;
            a=a*a;
        }
        return ans;
    }
    string tran(int num)
    {
        string s;
        int i;
        for(i=0;i<32;i++)
        {
            if(num&(1<<i)) s="1"+s;
            else s="0"+s;
        }
        return s;
    } 
    void insert(string s)
    {
        int p=1,k;
        for(k=0;k<32;k++)
        {
            int ch=s[k]-'0';
            if(trie[p][ch]==0) trie[p][ch]=++tot;
            p=trie[p][ch];
        }
    }
    int search(string s)//返回最大的异或值 
    {
        int k,p=1,num=0;
        for(k=0;k<32;k++)
        {
            int orip=p;
            p=trie[p][1-(s[k]-'0')];//防止p被更改 
            if(p==0) 
            {
                p=trie[orip][s[k]-'0'];//退而求其次
            }
            else
            {
                num+=fpow(2,32-k-1);
            }
        }
        return num;
    }
    int main()
    {
        cin>>n;
        int i;
        for(i=1;i<=n;i++)
        {
            int temp;
            scanf("%d",&temp);
            string ss=tran(temp);
            insert(ss);
            v.push_back(ss);
        } 
        for(i=0;i<v.size();i++)
        {
            ans=max(ans,search(v[i]));
        }
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    动画差值
    高达模型
    TCP/IP负载均衡
    FreeImage使用
    Game Programming Pattern
    Apple Instruments
    GLEW OpenGL Access violation when using glGenVertexArrays
    微服务了解
    summary
    事务传播行为
  • 原文地址:https://www.cnblogs.com/lipoicyclic/p/13030342.html
Copyright © 2011-2022 走看看