题目链接:hdu_5969_最大的位或
题意:
中文,还是自己看
题解:
xjb贪心一下就行了
1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;i++) 3 using namespace std; 4 typedef unsigned long long ll; 5 6 int t; 7 ll a,b; 8 int dita[70],ditb[70],eda,edb; 9 int main() 10 { 11 scanf("%d",&t); 12 while(t--) 13 { 14 scanf("%lld%lld",&a,&b); 15 F(i,1,69)dita[i]=ditb[i]=0; 16 eda=edb=0; 17 while(a)dita[++eda]=a&1,a>>=1; 18 while(b)ditb[++edb]=b&1,b>>=1; 19 int fgr=0,fgl=0; 20 ll ans=0; 21 for(int i=64;i>=1;i--) 22 { 23 int now; 24 if(dita[i]||ditb[i]||fgl)now=1;else now=0; 25 if(now>dita[i])fgl=1; 26 if(now)ans|=1ll<<(i-1); 27 } 28 printf("%lld\n",ans); 29 } 30 return 0; 31 }
原文:http://www.cnblogs.com/bin-gege/p/6033735.html