Trie - Dr. Evil Underscores - CodeForces - 1285D
題意:
Input:
3
1 2 3
Output:
2
Input:
2
1 5
Output:
4
Note:
In the first sample, we can choose X=3.
In the second sample, we can choose X=5.
數據範圍:
題解:
代碼:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=1e5+10,M=30*N;
int son[M][2],n,idx,a;
void Insert(int x)
{
int p=0;
for(int i=29;i>=0;i--)
{
int u=x>>i&1;
if(!son[p][u]) son[p][u]=++idx;
p=son[p][u];
}
}
int dfs(int p,int k)
{
if(k==-1) return 0;
if(son[p][0]==0) return dfs(son[p][1],k-1);
else if(son[p][1]==0) return dfs(son[p][0],k-1);
else return (1<<k) + min(dfs(son[p][1],k-1),dfs(son[p][0],k-1));
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a);
Insert(a);
}
int ans=dfs(0,29);
printf("%d\n",ans);
return 0;
}