社区讨论

存疑

P10471最大异或对 The XOR Largest Pair参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m6uf918e
此快照首次捕获于
2025/02/07 15:05
去年
此快照最后确认于
2025/11/04 09:49
4 个月前
查看原帖
为什么开了 O2 RE #5,关了O2 WA #5? 为什么???
CPP
#include<bits/stdc++.h>
using namespace std;
#define k 31
int n,cnt;
unsigned ans;
int t[100010][2];
int b[1000010][33];
inline void biuld(int d,int x){
	int p=0;
	bool *c=new bool[50];
	if(x<0)x=-x,c[k]=1;
	for(int i=0;i<=k;i++){
		bool y=(x&(1<<i))>>i;
		c[i]=y;
	}
	for(int i=k;i>=0;i--){
		b[d][i]=c[i];
		if(!t[p][b[d][i]])t[p][b[d][i]]=++cnt;
		p=t[p][b[d][i]];
	}
	delete []c;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int a;
		cin>>a;
		biuld(i,a);
	}
	for(int i=1;i<=n;i++){
		int root=0;
		unsigned sum=0;
		for(int j=k;j>=0;j--){
			if(!b[i][j]){
				if(t[root][1])sum+=(1<<j),root=t[root][1];
				else root=t[root][0];
			}else{
				if(t[root][0])sum+=(1<<j),root=t[root][0];
				else root=t[root][1];
			}
		}	
		ans=max(ans,sum);
	}
	cout<<ans;
	return 0;
} 

回复

2 条回复,欢迎继续交流。

正在加载回复...