代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,now,ans,sum;
bool t;
const int MAXN=1e7+5;
ll a[MAXN];
struct EDGE{
ll son[2];
}node[MAXN];
ll cnt;
inline void read(ll &num)
{
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') num=-num;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
num=(num<<1)+(num<<3)+(ch-'0');
ch=getchar();
}
return;
}
void insert(ll num)
{
now=0;
for(int i=31;i;i--)
{
t=(num>>i)&1;
if(!node[now].son[t]) node[now].son[t]=++cnt;
now=node[now].son[t];
}
return;
}
ll find(ll num)
{
ans=now=0;
for(int i=31;i;i--)
{
t=(num>>i)&1;
if(!node[now].son[t^1])
now=node[now].son[t];
else
{
now=node[now].son[t^1];
ans=ans^(1<<i);
}
}
return ans;
}
int main(){
read(n);
for(int i=1;i<=n;i++)
{
read(a[i]);
insert(a[i]);
}
for(int i=1;i<=n;i++)
sum=max(sum,find(a[i]));
printf("%lld\n",sum+1);//没错,+1是我骗分过样例的
return 0;
}
然而数据太水,让我过了个80pts……