J - 最大的位或

B君和G君聊天的时候想到了如下的问题。 
给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大。 
其中|表示按位或,即C、 C++、 Java中的|运算。

Input包含至多10001组测试数据。 
第一行有一个正整数,表示数据的组数。 
接下来每一行表示一组数据,包含两个整数l,r。 
保证 0 <= l <= r <= 10181018。Output对于每组数据输出一行,表示最大的位或。Sample Input

5
1 10
0 1
1023 1024
233 322
1000000000000000000 1000000000000000000

Sample Output

15
1
2047

 1 #include <iostream>
 2 using namespace std;
 3 #include<string.h>
 4 #include<set>
 5 #include<stdio.h>
 6 #include<math.h>
 7 #include<queue>
 8 #include<map>
 9 #include<algorithm>
10 #include<cstdio>
11 #include<cmath>
12 #include<cstring>
13 #include <cstdio>
14 #include <cstdlib>
15 #include<cstring>
16 unsigned long long n,m;
17 int a[2000],b[2000];
18 int achang,bchang;
19 int meishaomvbianshen1( unsigned long long q)
20 {
21     int i;
22     for(i=0;q!=0;i++)
23     {
24         a[i]=q%2;
25         q/=2;
26     }
27     return i;
28 }
29 int meishaomvbianshen2( unsigned long long q)
30 {
31     int i;
32     for(i=0;q!=0;i++)
33     {
34         b[i]=q%2;
35         q/=2;
36     }
37     return i;
38 }
39 int main()
40 {
41     int i;
42     int t;
43     cin>>t;
44     while(t--)
45     {
46         cin>>n>>m;
47         memset(a,0,sizeof(a));
48         memset(b,0,sizeof(b));
49         achang=meishaomvbianshen1(n);
50         bchang=meishaomvbianshen2(m);
51         if(achang<bchang)
52         {
53             unsigned long long sum=0;
54              unsigned long long add=1;
55             for(i=0;i<bchang;i++)
56             {
57                 sum+=add;
58                 add*=2;
59             }
60             cout<<sum<<endl;
61             continue;
62         }
63         else if(achang==bchang)
64         {
65             if(n==m)
66             {
67                 cout<<n<<endl;
68                 continue;
69             }
70             int flag=0;
71             for(i=achang-1;i>=0;i--)
72             {
73                 if(flag)
74                     a[i]=1;
75                 else if(a[i]!=b[i])
76                 {
77                     a[i]=1;
78                     flag=1;
79                 }
80             }
81             unsigned long long sum=0;
82             unsigned long long add=1;
83             for(i=0;i<achang;i++)
84             {
85                 sum+=a[i]*add;
86                 add*=2;
87             }
88             cout<<sum<<endl;
89         }
90     }
91     return 0;
92 }

511
1000000000000000000不多BB 代码简单易懂  还略显风骚
时间: 2024-10-10 06:46:01

J - 最大的位或的相关文章

hdu 5969 最大的位或

最大的位或 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 655    Accepted Submission(s): 293 Problem Description B君和G君聊天的时候想到了如下的问题.给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大.其中|表示按位或,即C. C+

给定两个32位的整数N和M,以及表示比特位置的i和j。编写一个方法,将M插入到N中, * 使得M从N的第j位开始,到第i位结束

1 /* 2 * 给定两个32位的整数N和M,以及表示比特位置的i和j.编写一个方法,将M插入到N中, 3 * 使得M从N的第j位开始,到第i位结束,假定从j位到i位足以容纳M,也即是M=10011 4 * 那么j和i之间至少可以容纳5个数,假如,不可能出现j=3,i=2的情况,因为第三位和第二位之间放不下M 5 * 例如 6 * N=1000000000(1024) 7 * M=10011(19) 8 * i=2,j=6,输出10001001100 9 * 思路如下: 10 * 1.将N中的从

Codeforces Round #344 (Div. 2)(按位或运算)

Blake is a CEO of a large company called "Blake Technologies". He loves his company very much and he thinks that his company should be the best. That is why every candidate needs to pass through the interview that consists of the following probl

BZOJ 4036: [HAOI2015]按位或 集合幂函数 莫比乌斯变换 莫比乌斯反演

http://www.lydsy.com/JudgeOnline/problem.php?id=4036 http://blog.csdn.net/lych_cys/article/details/50898726 http://blog.csdn.net/qq_21995319/article/details/49800999 for(int i=1;i<=1;i++) for(int j=1;j<=1;j++) f[i○j]=a[i]*b[j]; 当○为按位或时,这种运算就称为集合并卷积.

bzoj4036 / P3175 [HAOI2015]按位或

bzoj4036 / P3175 [HAOI2015]按位或 是一个 min-max容斥 的板子题. min-max容斥 式子: $ \displaystyle max(S) = \sum_{T\sube S} (-1)^{|T|+1} min(T) $ 并且很优秀的是,它在期望情况下成立! 这个有什么关系呢.. 如果每一位分开考虑,如果第 $ i $ 位变成 1 的期望时间是 $ T(i) $ 那么求的是 $ E(max(T_{1\dots n})) $ 这个可以 min-max容斥 求 $

Clustering by Passing Messages Between Data Points(Brendan J.Frey* and Delbert Dueck)例子

例1,数据点聚类:AP应用到25个二维数据中,使用负平法误差作为相似度  聚类数目不用预先指定 AP的一个优点是聚类数目不用预先指定,而是在消息传递方法中慢慢浮现,取决于输入参考度(preference),这种自动模型的选择,基于先验指定每一个数据点有多合适作为exemplar. 下图表示输入常量参考度对聚类数目的影响,这种关系近乎同样于在精确最小平方误差中的关系. 例2,人脸识别:使用优化标准为均方差,识别900张灰度图像   AP一致的能够实现更低的误差,在时间上花费要少于两个数量级. AP

Swift学习之位移枚举的按位或运算

在OC里面我们经常遇到一些枚举值可以多选的,需要用或运算来把这些枚举值链接起来,这样的我们称为位移枚举,但是在swift语言里面却不能这么做,下面来讲解一下如何在swift里面使用 OC的位移枚举的区分 //位移枚举typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutores

ACM ICPC 2011–2012, NEERC, Northern Subregional Contest J. John’s Inversions(合并排序求逆序数对数)

题目链接:http://codeforces.com/gym/100609/attachments 题目大意:有n张牌,每张牌有红色和蓝色两面,两面分别写了一些数字,同种颜色的任意两个数字若排在前面的数字比排在后面的数字大就叫做一对逆序数.求怎样排序得到的逆序数对最少. 解题思路:其中一种颜色的数字是顺序且这种颜色数字相同时对应的另一种颜色的数字是顺序时得到的逆序数对数最少.难点在于求逆序数对数.因为数量很大O(n^2)复杂度不能满足,这里根据合并排序的原理求解每个数字前面有多少个比它大的数字,

HDU5006 Resistance (2014年鞍山赛区网络赛J题)

1.题目描述:点击打开链接 2.解题思路:本题利用缩点+高斯消元解决.本题的最大特点就是电阻非零即一,如果电阻为0,说明零点之间是等电位点,可以看做一个整体,自然可以想到先利用并查集进行缩点操作,将复杂的电路图转化为不相等的电位点构成的电路图.如果转换完毕后,发现s和t在一个集合中,说明两点之间是等电位的,等效电阻为0,否则,对转换后的图G'重新判断连通性,依然可以利用并查集解决,如果发现不连通,说明s与t之间开路,电阻为inf,否则,就可以根据tot个点的电位列写方程. 我们令有1A的电流从点