BC #83 1004 && HDU-5683 zxa and xor (水)
题意:很简单就是求每俩个数(不同)的Sum,再求总的异或(a1+a2)⊗(a1+a3)⊗⋯⊗(a1+an)⊗(a2+a3)⊗(a2+a4)⊗⋯⊗(a2+an)⊗⋯⊗(an−1+an)
直接暴力先打出来,初值为0(利用异或性质 a^0 = a) 最初的sum的总异或,再修改(利用异或性质 a^a =0)求解,代码如下:
#include"iostream"
#include"cstdio"
using namespace std;
int main(){
int t,n,m,j,i;
long long a[20010],sum,x,y;
scanf("%d",&t);
while(t--){
scanf("%d %d",&n,&m);
for(i=1; i<=n; i++){
scanf("%lld",&a[i]);
}
sum = 0;
for(i=1; i<n; i++){
for(j=i+1; j<=n; j++)
sum ^= (a[i]+a[j]);
}
while(m--){
scanf("%lld %lld",&x,&y);
for(i=1; i<=n; i++){
if(i!=x){
sum ^=(a[i]+y),sum^=(a[i]+a[x]);
}
}
printf("%lld\n",sum);
a[x] = y;
}
}
return 0;
}