- Quiz
- AC
- 解説
- f(a,b) = a&(~b)
- 最終的な値は、先頭のa0と、それ以外(順不同)で決まる。ではどれを先頭に持ってくればいいか?
- 先頭の値のbit=1, それ以外のbit=0であるようなbitの桁があれば、最終的な値もそのbitは1にできる
- 各桁ごとにbitの出現回数を求め、それが1であるものから、先頭にすべき値が分かる
サンプルテストケース
3
11 4 11
answer
4 11 11
int main(){
ll N;
cin>>N;
VI A(N);
rep(i, N) cin >> A[i];
VI C(35);
for(ll a : A){
auto bs = bitset<35>(a);
rep(i,35){
C[i] += bs[i];
}
}
ll bit_one_pos = -1;
for(int i=35-1; i>=0; i--){
if(C[i]==1){
bit_one_pos = i;
break;
}
}
if(bit_one_pos==-1){
print_vector(A);
return 0;
}
int head_index = -1;
rep(i,N){
ll a = A[i];
auto bs = bitset<35>(a);
if(bs[bit_one_pos]==1) head_index=i;
}
VI I;
rep(i,N)I.push_back(i);
swap(I[head_index], I[0]);
VI Ans;
for(ll idx : I){
Ans.push_back(A[idx]);
}
print_vector(Ans);
return 0;
}