存疑
查看原帖
存疑
1127560
SR_G_B_ysqd1602楼主2025/2/7 15:04

为什么开了 O2 RE #5,关了O2 WA #5? 为什么???

#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;
} 
2025/2/7 15:04
加载中...