結果

問題 No.130 XOR Minimax
コンテスト
ユーザー vjudge1
提出日時 2025-11-08 17:19:58
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 970 bytes
コンパイル時間 1,448 ms
コンパイル使用メモリ 162,180 KB
実行使用メモリ 382,324 KB
最終ジャッジ日時 2025-11-08 17:20:05
合計ジャッジ時間 6,410 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 4 WA * 17
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int sum=0,f=1;char c=getchar();
	while(!isdigit(c)){if(c=='-') f=-f;c=getchar();}
	while(isdigit(c)){sum=sum*10+c-'0';c=getchar();}
	return sum*f;
}
const int N=5e6+5;
const int M=32;
int cnt,n;
int num[N];
int s[M],a[N];
int nxt[N][26*2+10];
void add(){
	int now=0,len=M;
	for(int i=0;i<len;i++){
		int v=s[i];
		if(!nxt[now][v]) nxt[now][v]=++cnt;
		now=nxt[now][v];
		num[now]++;
	}
}
void query(){
	int now=0,len=M,x=0,ans=0;
	for(int i=0;i<len;i++){
		if(nxt[now][0]){
			s[i]=0;
			now=nxt[now][0];
		}
		else{
			s[i]=1;
			now=nxt[now][1];
		}
	}
	for(int i=0;i<M;i++){
	//	cout<<s[i];
		if(s[i]) x+=(1<<(M-1-i));
	}
//	cout<<x<<endl;
	for(int i=1;i<=n;i++){
		ans=max(ans,a[i]^x);
	}
	cout<<ans<<endl;
}
signed main(){
	n=read();
	for(int i=1;i<=n;i++){
		a[i]=read();
		for(int j=0;j<M;j++){
		//	cout<<s[j];
			s[j]=(bool)(a[i]&(1<<(M-1-j)));
		}//cout<<endl;
		add();
	}
	query();
	return 0;
}
0