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
对于每组数据输出一行,表示最大的位或。

题目是中文的题意就不解释了

大致还是贪心的思想,两个数异或有1就是1都是0才是0。

这题我们只要考虑两种情况就可以了。一种是当他们都化为二进制时,比较一下位数如果他们的位数相差1以上的话直接将所有位数都变成1。

第二种当他们位数相同时也是最难考虑的情况,从高位向低位遍历,遇到相同位为1的时候继续向下查找知道为1的位不相同时,将位小的为1

以后的全变成1。大致如何实现还是看代码,语言表达能力较差,不好解释。

#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
int dig1[70] , dig2[70] ,dig3[70];
void Get(ll x , int dig[] , int &gg) {
int len = 0;
if(x == 0) {
len = 1;
}
while(x) {
dig[++len] = x % 2;
x >>= 1;
}
gg = len;
}
ll Pow(int x , int y) {
ll sum = 1;
for(int i = 1 ; i <= y ; i++) {
sum *= x;
}
return sum;
}
int main()
{
int t; cin >> t;
while(t--) {
ll l , r;
memset(dig1 , 0 , sizeof(dig1));
memset(dig2 , 0 , sizeof(dig2));
memset(dig3 , 0 , sizeof(dig3));
cin >> l >> r;
int len1 = 0 , len2 = 0;
Get(l , dig1 , len1);
Get(r , dig2 , len2);
if(len1 == len2) {
int temp1 = 0;
int temp2 = 0;
int flag = 0;
for(int i = len2 ; i >= 1 ; i--) {
if(dig2[i] == 1 && flag == 0) {
temp1 = i;
}
if(dig1[i] == 1) {
temp2 = i;
if(flag == 1)
break;
}
if(temp1 == temp2) {
;
}
else {
flag = 1;
temp2 = temp1 - 1;
}
}
if(temp1 == temp2) {
for(int i = len2 ; i >= 1 ; i--) {
dig3[i] = dig2[i];
}
}
else {
for(int i = len2 ; i >= 1 ; i--) {
if(i > temp1) {
dig3[i] = dig2[i];
}
else {
dig3[i] = 1;
}
}
}
}
if(len1 < len2) {
for(int i = len2 ; i >= 1 ; i--) {
dig3[i] = 1;
}
}
ll sum = 0;
for(int i = 1 ; i <= len2 ; i++) {
sum += Pow(2 , i - 1) * dig3[i];
}
cout << sum << endl;
}
return 0;
}

hdu 5969 最大的位或(贪心)的更多相关文章

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

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

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

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

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

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

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

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

  5. HDU 5969 最大的位或【贪心/按位或/思维】

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

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

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

  7. HDU - 5969 最大的位或 想法题

    http://acm.hdu.edu.cn/showproblem.php?pid=5969 (合肥)区域赛签到题...orz 题意:给你l,r,求x|y的max,x,y满足l<=x<=y ...

  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\)最大. 其中\(|\)表示 ...

随机推荐

  1. android 基于wifi模块通信开发

    这篇文章主要是我写完手机与wifi模块通信后所用来总结编写过程的文章,下面,我分几点来说一下编写的大概流程. 一.拉出按钮控件并设置它的点击事件 二.设置wifi权限 三.打开和关闭wifi 四.扫描 ...

  2. 极力推荐一个简单好用的C++JSON库

      极力推荐一个简单好用的C++JSON库CJsonObject,让使用json如使用C++原生的结构体那般方便,随心所欲.CJsonObject是个优秀的C++JSON库,也许会是你见过的最为简单易 ...

  3. go杂货铺

    json序列化 内存中变成可存储或传输的过程称之为序列化(dict,split,struct转string) package main import ( "encoding/json&quo ...

  4. 通俗地说决策树算法(三)sklearn决策树实战

    前情提要 通俗地说决策树算法(一)基础概念介绍 通俗地说决策树算法(二)实例解析 上面两篇介绍了那么多决策树的知识,现在也是时候来实践一下了.Python有一个著名的机器学习框架,叫sklearn.我 ...

  5. git的使用学习笔记

    一.git Git 是一个开源的分布式版本控制系统,项目版本管理工具,可以在本地提交修改再合并到主分支上,最为出色的是它的合并跟踪(merge tracing)能力. 可以通过Linux命令进行增加, ...

  6. 逆向破解之160个CrackMe —— 001

    CrackMe —— 001 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  7. Netty学习(五)-DelimiterBasedFrameDecoder

    上一节我们说了LineBasedframeDecoder来解决粘包拆包的问题,TCP以流的方式进行数据传输,上层应用协议为了对消息进行区分,一般采用如下4种方式: 消息长度固定,累计读取到消息长度总和 ...

  8. 洛谷 P3413 SAC#1 - 萌数

    题意简述 求l~r之间存在长度至少为2的回文子串的正整数的个数 题解思路 数位DP 注意到有偶数长度的回文串必有长度为2的回文串,有奇数长度的回文串必有长度为3的回文串 所以只需判断与前一位,前两位是 ...

  9. (三十三)c#Winform自定义控件-日期控件

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...

  10. python骚操作---Print函数用法

    ---恢复内容开始--- python骚操作---Print函数用法 在 Python 中,print 可以打印所有变量数据,包括自定义类型. 在 3.x 中是个内置函数,并且拥有更丰富的功能. 参数 ...