给定n个数,求n个数的两两异或和
#include <bits/stdc++>
using namespace std;
#define ll long long
const int N = 1e5;
int arr[N];
ll res = 0;
int main()
{
int n; cin >> n;
int len, maxx = -1;
for(int i=1;i<=n;i++)
{
int a; cin >> a;
len = 0;
while(a)
{
len ++;
if(a&1) arr[len]++;
a >>= 1;
}
maxx = max(maxx, len);
}
for(int i=1;i<=maxx;i++)
{
res += (ll)(1<<(i-1)) * (ll)arr[i] * (ll)(n-arr[i]);
}
cout << res;
return 0;
}