BitwiseEquations (SRM 430 Div2 500)

题目链接:http://www.topcoder.com/stat?c=problem_statement&pm=9921&rd=13521

x+y=x|y.
二进制加法1+0=1|0. 当而仅当x,y的二进制表示中,x的'1'位不与y的'1'对应,这个等式就成立.
所以,对于x中为1的位,y只能为0,对于x中为0的位,y相应位可以任意.
要求第k个y,很显然,把k的二进制表示填充到x的0位中去,即可.

   class BitwiseEquations
              { 
              
public
              
long long kthPlusOrSolution(int _x, int k) 
                  {                 
                  
long long result;
                  
long long mask = 1;
                  
long long x = _x;
                  result 
= 0;
                  
                  
for(int i=0;i<64&&k!=0;++i){
                      
if((mask&x)==0){
                            result
|=((k&1)*mask);
                            k
>>=1;
                      }
                      mask
<<=1;
                  } 
                  
return result;
              }
}




posted on 2009-06-20 12:02 YZY 阅读(902) 评论(0)  编辑 收藏 引用 所属分类: AlgorithmTopCoder


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿(2)

随笔分类

随笔档案

搜索

积分与排名

最新评论

阅读排行榜