思路:
A XOR B
可以看作(A , B)二进制下的加法(最后,每一位都mod 2)
// XOR 可以看作二进制下的加法(每位计算后需要mod 2)
/*
1001
0011
---- //add 操作
1012
---- //mod 2 操作
1010
(1001)^(0011) = (1010)
*/
根据题目的要求,我们把式子整理一下
把 xor 全部看成’+‘(加法),我们换成二进制进行上述计算
这样我们就可以把括号拆了
得到 :
(n-1)*a1 + (n-1)*a2 + ... + (n-1)*an
因为题目要的是mod 2 的结果
10进制数mod 2一定是可以得到对应2进制的最后1位(2^0权重位)
所以我们无需将10进制转成2进制进行上述操作,直接加一起mod 2就是答案!
AC代码如下:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <cstdio>
#include <map>
#include <vector>
#include <numeric>
#include <queue>
#define ll long long
#define PII pair<int, int>
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 1e5 + 5;
const int mod = 1e9 + 7;
int main()
{
int n;
scanf("%d",&n);
ll ans = 0;
for(int i = 1;i<=n;i++)
{
ll t;
scanf("%lld",&t);
ans += (t*(n-1));
ans%=2;
}
cout<<ans<<"\n";
}
// XOR 可以看作二进制下的加法(每位计算后需要mod 2)
/*
1001
0011
---- //add 操作
1012
---- //mod 2 操作
1010
(1001)^(0011) = (1010)
*/