您的位置:首页 > 其它

hdu_5969_最大的位或(贪心)

2016-11-05 18:59 405 查看

题目链接: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 }
View Code

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: