设为首页 加入收藏

TOP

HDU4149 Magic Potion(位运算)
2015-07-22 20:10:14 来源: 作者: 【 】 浏览:5
Tags:HDU4149 Magic Potion 运算

?

题意:给出x1,x2,x3,x4,x5,x6,x7,x8与某值m进行异或运算后的结果,再给出x1~x8之和与m进行异或运算后的结果sum,求m.

思路:

根据位运算特性来做,由于m最大为32位,我们可以从最低位依次来推理得到,用x>>i&1来取右数第i-1位的值。

假设二进制右起第一位是1,算出所有xi的右起第一位二进制结果,累加得到tmp,比较tmp与sum的最右位,符合则m最右位为1,否则为0;

于是x1~x8的二进制最右位已求出,累加求进位依次类推。

?

很有意思的一道题~

?

code:

?

/*
*Author : Flint_x 
*Created Time : 2015-07-20 14:19:04 
*File name : whust1_I.cpp 
*/

#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
       
         #include
        
          #include
         
           #include
           #include
           
             #include
            
              #include
             
               #include
              
                #include
               
                 #include
                
                  #include
                 
                   #include
                  
                    #include
                   
                     #include
                    
                      using namespace std; const double eps(1e-8); typedef long long lint; #define cls(a) memset(a,0,sizeof(a)) #define rise(i,a,b) for(int i = a ; i <= b ; i++) #define fall(i,a,b) for(int i = a ; i >= b ; i--) int main(){ // freopen(input.txt,r,stdin); // freopen(output.txt,w,stdout); int T; cin >> T; rise(t,1,T){ int r[10]; rise(i,1,9) cin >> r[i]; int sum = 0, m = 0; rise(i,0,31){ int tmp = 0; rise(j,1,8){ tmp += r[j]>>i&1; } if((sum + tmp)% 2 != (r[9]>>i&1)){//x>>i&1等效于1<
                     
                      

?

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇uva 673 Parentheses Balance 下一篇hdoj-1086-You can Solve a Geome..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: