結果
| 問題 |
No.130 XOR Minimax
|
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2025-11-08 17:07:02 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,082 bytes |
| コンパイル時間 | 1,499 ms |
| コンパイル使用メモリ | 162,224 KB |
| 実行使用メモリ | 382,432 KB |
| 最終ジャッジ日時 | 2025-11-08 17:07:09 |
| 合計ジャッジ時間 | 6,513 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 4 WA * 17 |
ソースコード
#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=31;
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][1]){
s[i]=0;
now=nxt[now][0];
continue;
}
int n1=nxt[now][1],n2=nxt[now][0];
if(i==1&&num[n1]==n||num[n1]==num[now]){
s[i]=1;
now=n1;
}
else{
s[i]=0;
now=n2;
}
}
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;
}
vjudge1