其他分享
首页 > 其他分享> > AcWing 143. 最大异或对

AcWing 143. 最大异或对

作者:互联网

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

 

#include<bits/stdc++.h>
using namespace std;
const int N=4e6+10;
int ch[N][2],n,a,ans,tot=1;
void insert()
{
    int u=1;
    for(int i=30;i>=0;i--)
    {
        int v=(a>>i)&1;
        if(!ch[u][v])ch[u][v]=++tot;
        u=ch[u][v];
    }
}
void query()
{
    int u=1,tmp=0;
    for(int i=30;i>=0;i--)
    {
        int v=(a>>i)&1?0:1;
        if(ch[u][v])tmp+=(1<<i),u=ch[u][v];
        else u=ch[u][!v]; 
    }
    ans=max(ans,tmp);
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a);
        query();
        insert();
    } 
    cout<<ans<<endl;
    return 0;
} 

 

标签:tmp,ch,143,int,void,tot,异或,AcWing
来源: https://www.cnblogs.com/1314cyd/p/14252316.html