蒟蒻代码求条
查看原帖
蒟蒻代码求条
1065071
Atserckcn楼主2024/6/7 22:56

代码:

#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……

2024/6/7 22:56
加载中...