http://acm.hzau.edu.cn/problem.php?id=1104网址链接
#include <bits/stdc++.h>
int num[64] ;
int er[31] ;
void init()
{
er[0] = 1 ;
for(int i = 1 ; i < 30 ; i ++){
er[i] = er[i-1]*2 ;
}
}
int main()
{
init() ;
int n , m ;
while(~scanf("%d %d",&n,&m)){
memset(num,0,sizeof num) ;
int temp ;
int cnt = 0 ;
for(int i = 0 ; i < n ; i ++){
scanf("%d",&temp) ;
cnt = 0 ;
while(temp){
if(temp%2 == 1)
num[cnt] ++ ;
temp/=2 ;
cnt ++ ;
}
}
while(m--){
int op ;
scanf("%d",&op) ;
if(op == 1){
long long sum = 0 ;
for(int i = 0 ; i < 25 ; i ++){
sum += num[i]*er[i] ;
}
printf("%lld\n",sum) ;
}
else if(op == 2){
int cnt = 0 ;
int d ;
scanf("%d",&d) ;
while(d){
if(d%2 == 1)
num[cnt] = n - num[cnt] ;
d /= 2 ;
cnt ++ ;
}
}
}
}
return 0 ;
}
将二进制巧妙利用 存好每个数 异或也是二进制的一种 转化为二进制来做题, 完全没想到。 学到了 记录下
int jinzhi( LL a , LL b )
{
int ans = 0 ;
while(a)
{
ans += a%b ;
a /= b ;
}
return ans ;
}