HZAU 1104: Sum and XOR

来源:互联网 发布:知乎查看我的收藏 编辑:程序博客网 时间:2024/05/12 07:42

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 ;}


0 0
原创粉丝点击