trie变形 存二进制位
思路分析
代码实现
#include<bits/stdc++.h>
using namespace std;
const int N=100010,M=3100010;
int a[N],son[M][2];
int idx;
void insert(int x)
{
int p=0;
for(int i=30;i>=0;i--)
{
int u=x>>i&1;
if(!son[p][u])
son[p][u]=++idx;
p=son[p][u];
}
}
int search(int x)
{
int p=0,res=0;
for(int i=30;i>=0;i--)
{
int u=x>>i&1;
if(son[p][!u])
{
res=res*2+1;
p=son[p][!u];
}
else
{
res=res*2+0;
p=son[p][u];
}
}
return res;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
insert(a[i]);
}
int res=0;
for(int i=0;i<n;i++)
res=max(res,search(a[i]));
cout<<res<<endl;
return 0;
}
同类题型
视频讲解
⬅️ trie树 🏠 00-听课板子 ➡️ 并查集
💬 评论