题解:CF2094E Boneca Ambalabu
jinhangdong · · 题解
首先将这些数转化成二进制,然后遍历每一个数,枚举每一个二进制位,先看自己这一位是几,如果是
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int t,n,Max,ans,a[N],sum[35][2];
signed main()
{
cin>>t;
while(t--)
{
Max=0;
memset(sum,0,sizeof(sum));
cin>>n;
for(int i=1;i<=n;++i)
{
cin>>a[i];
int x=a[i],cnt=0;
for(int j=0;j<32;++j)//转二进制
{
sum[cnt++][x%2]++;//统计这一位几个0,几个1
x/=2;
}
}
for(int i=1;i<=n;++i)
{
ans=0;
for(int j=0;j<32;++j)
{
if((1<<j)&a[i]) ans+=sum[j][0]*(1<<j);
else ans+=sum[j][1]*(1<<j);
}
Max=max(Max,ans);
}
cout<<Max<<"\n";
}
return 0;
}