蚂蚁的难题(一) http://acm.nyist.net/JudgeOnline/status.php?pid=744

 

蚂蚁的难题(一)

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
 
描述

小蚂蚁童鞋最近迷上了位运算,他感觉位运算非常神奇。不过他最近遇到了一个难题:

给定一个区间[a,b],在区间里寻找两个数x和y,使得x异或y最大。来,帮帮他吧!

 
输入
有多组测试数据(以EOF结尾)。
每组数据输入两个数a,b.(0<=a<b<2^63)
输出
输出a到b之间,异或最大的值。
样例输入
1 2
8 9
样例输出
3
1
来源
蚂蚁系列
上传者
菜鸟咋了

   这是一道简单的数学题。 
 
   求区间[a, b] 之间的 异或 最大, 推几组数据,我们可以发现 

   结果都是 2^n - 1;     

   那么关键问题就是 求 n 的大小。 

   我们发现 n 的大小 与 a^b 有关。

#include <stdio.h>  
int main()  
{  
    long long a;
	long long b;  
    while(scanf("%lld %lld",&a,&b)!=EOF) 
    {   
      
        int count = 0;
        long long cj=1,x;
        x = a ^ b;  
        while(x)  
        {
                count++;
                x =x/2;  
        }
        while(count)
        {
                cj*=2;
                count--;
        }
        printf("%lld\n",cj-1);  
    }  
    return 0;  
} 

 

posted @ 2013-08-21 10:41  王莜轩  阅读(414)  评论(0编辑  收藏  举报