异或游戏 运算符优先级问题
题目描述
小海棠有一个数组,她每次会从中挑选出两个数字做异或和,她想知道对这个数组的所有数字进行完所有可能采样后的异或和的和是多少,即求得以下公式的值:
y = ∑ i = 1 n ∑ j = i + 1 n ( a i ⊕ a j ) y = \sum_{i=1}^{n} \sum_{j=i+1}^{n} (a_i \oplus a_j)y=∑
i=1
n
∑
j=i+1
n
(a
i
⊕a
j
)
其中⊕ \oplus⊕表示异或操作。
输入格式
多组测试样例,第一行包含一个整数T TT表示样例组数。
每组样例中,第一行包含一个整数n nn表示数组长度,第二行包含n nn个用空格分离的数字。
输出格式
对于每个样例,输出一个数字表示异或和的和。
输入样例
2
2
1 2
3
1 2 3
输出样例
3
6
代码:
#include <bits/stdc++.h>
#define MX 20005
using namespace std;
//运算符优先级问题
int t;
int dp[MX];
int main() {
cin>>t;
while(t--)
{
int n;
cin>>n;
int a[MX] = {0};
for(int i = 1;i <= n;i++)
{
cin>>a[i];
}
int sum = 0;
for(int i = 1;i <= n;i++)
{
for(int j = i+1;j <= n;j++)
{
int t = a[i] ^ a[j];
sum = sum + t;
}
}
cout<<sum<<endl;
}
return 0;
}