链接

最大的位或

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 3589 Accepted Submission(s): 1369

Problem Description

B君和G君聊天的时候想到了如下的问题。

给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大。

其中|表示按位或,即C、 C++、 Java中的|运算。

Input

包含至多10001组测试数据。

第一行有一个正整数,表示数据的组数。

接下来每一行表示一组数据,包含两个整数l,r。

保证 0 <= l <= r <= 1018。

Output

对于每组数据输出一行,表示最大的位或。

Sample Input

5

1 10

0 1

1023 1024

233 322

1000000000000000000 1000000000000000000

Sample Output

15

1

2047

511

1000000000000000000

Source

2016年中国大学生程序设计竞赛(合肥)-重现赛(感谢安徽大学)

【分析】

我们想要得到的位或最大,那么进行位或的一个数一定是最右边的数,因为它的二进制位最多
假设区间为5-10
那我们观察5的二进制有效位是3,10的二进制有效位是4
像这样区间的端点的有效位不相同,那么从有效位少的左端点3位增加到4位的过程中一定会出现一个3位都是1的数字,对应于我举得例子就是7,7的二进制为111,那么111和1010或运算得到1111,即15.这就是或运算最大的值。
如果区间俩个端点有效位相同 假设区间为8-10
8的二进制是1000
10的二进制是1010.我们这样想因为他们分别是左右端点,那么从左端点增加至右端点一定不会超过右端点。且因为二进制增加是从末尾增加,那么从8增加到10,一定不会出现1011,因为1011已经大于10,不属于区间了
那我们从前往后找,找到8和10的二进制的第一个不同位是第三位。那我们来看10的第三位往后是10,8的第三位往后是00,那么从00增加到10,是不是一定会出现01,也就是小于10的有效位一位的全为1的数字。
那么1010和1001或运算为1011,即11 再举一个例子: 假设区间是16-22
他们的二进制分别为10000,10110,
首先他们有效位相同,那么从左往右找到第三位开始不同,把前面的忽略,为什么忽略?因为左边的高位即使有0,但是在左端点增加至右端点过程,也不会出现那个位是1得数,因为那个位是1的数肯定大于右端点。忽略前面的位,他们二进制分别是000,110,那么从000增加至110,一定会出现011,对吧。
那么最大位或就是10011和10110的或运算结果

【代码】

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1005;
ll l,r,ans;
ll a[N],b[N];
int main()
{
int t;
cin>>t;
while(t--)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>l>>r;
//十进制转换为二进制
ll n=l,m=r;
int cl=0,cr=0;
while(n)
{
a[cl++]=n%2;
n/=2;
}
while(m)
{
b[cr++]=m%2;
m/=2;
}
ans=0;
for(int i=cr-1;i>=0;i--)
{
if(a[i]==b[i])
{
if(b[i])
{
ans+=(ll)pow(2,i);
}
}
else
{
ans+=(ll)pow(2,i+1)-1;break;
}
}
cout<<ans<<endl;
}
return 0;
}
10000
10110
---
10000
+ 111
因为中间一定遇到001
而R必须选
那么001|110——>111

HDU 5969 最大的位或【贪心/按位或/思维】的更多相关文章

  1. HDU 5969 最大的位或 (思维,贪心)

    HDU 5969 最大的位或 题目大意 B君和G君聊天的时候想到了如下的问题. 给定自然数\(l\)和\(r\) ,选取\(2\)个整数\(x,y\)满足\(l <= x <= y < ...

  2. hdu 4825 Xor Sum(trie+贪心)

    hdu 4825 Xor Sum(trie+贪心) 刚刚补了前天的CF的D题再做这题感觉轻松了许多.简直一个模子啊...跑树上异或x最大值.贪心地让某位的值与x对应位的值不同即可. #include ...

  3. HDU 5969 最大的位或 【贪心】 (2016年中国大学生程序设计竞赛(合肥))

    最大的位或 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem De ...

  4. HDU 5969 最大的位或 —— 贪心 + 二进制的理解

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5969 最大的位或 Time Limit: 2000/1000 MS (Java/Others)     ...

  5. hdu 5969 最大的位或(贪心)

    Problem Description B君和G君聊天的时候想到了如下的问题.给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大.其中|表示 ...

  6. HDU 5969 最大的位或【贪心】

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

  7. 【贪心算法】HDU 5969 最大的位或

    题目内容 Vjudge链接 给出一个闭区间,找该区间内两个数,使这两个数的按位或最大. 输入格式 包含至多\(10001\)组测试数据. 第一行有一个正整数,表示数据的组数. 接下来每一行表示一组数据 ...

  8. hdu 5969 最大的位或

    最大的位或 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  9. 最大的位或 HDU - 5969 简单思维题

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

随机推荐

  1. 【bzoj5060】魔方国 乱搞+特判

    题目描述 一张未知的有重边无自环的图,只知道点数为n,边数为m.可以标记若干个点,如果一个点被标记,那么与它距离不超过k的点(包括本身)都会被覆盖. 显然对于每张不同图,让所有点被覆盖的最小代价是不一 ...

  2. 在VS2012中设置默认启动

    Visual Studio 2012一个解决方案中多个项目,如果想选择哪个项目就设置哪个项目为启动项就好了. 第一种方法,工具===〉〉选项===〉〉〉项目解决方案===〉〉〉对于新的解决方案,使用单 ...

  3. [COGS 622] [NOIP2011] 玛雅游戏 模拟

    整个模拟的关键除了打出来就是一个剪枝:对于两个左右相邻的块你不用再走←,因为走→是等效的 #include<cstdio> #include<cstring> #include ...

  4. 在JS中,一切东东其实都是对象

    对象是组成JavaScript的基本单元,在JS中,一切东东其实都是对象,而且功能非常强大,它不仅风格独特,功能也与众不同. 一.引用(reference) 引用的概念是JS的基础之一,它是指向对象实 ...

  5. mysql共享表空间和独立表空间

    innodb这种引擎,与MYISAM引擎的区别很大.特别是它的数据存储格式等. 对于innodb的数据结构,首先要解决两个概念性的问题: 共享表空间以及独占表空间. 什么是共享表空间和独占表空间 共享 ...

  6. 一个IT中专生在深圳的9年辛酸经历

    一个IT中专生在深圳的9年辛酸经历 想一想来到深圳已经近10年了,感概万千呐!从一个身无分文的中专职校计算机毕业出来后,竟然大胆的南下(之前可是连我们那地区之外都没去过),现在有供完的房子,温柔的妻子 ...

  7. java封装的使用

    一:前言 其实以前我们来学习java特性的时候,对于封装好想觉得没什么用处,至少我那个时候的感觉(不知道是不是我学的太浅薄了~),现在由于项目从零开始做得,在做得过程中我感觉到原来封装是这样用的. 二 ...

  8. java基础学习(一)hashcode

    hashcode的作用 hashCode()方法是从Object类继承过来的,Object类中的hashCode()方法返回的是对象在内存中地址转换成的int值,如果对象没有重写hashCode()方 ...

  9. React module methods with passing props to child or invoking callback to parent.

    Some code samples for this pupose: import React from "react"; import MyDemo from "./m ...

  10. 河南省第十届省赛 Binary to Prime

    题目描述: To facilitate the analysis of  a DNA sequence,  a DNA sequence is represented by a binary  num ...