最大的位或

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++、 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
 
 
 
//第一次做位运算有关的题目,贪心方案想了好久。。。
 #include <stdio.h>
#include <string.h> typedef long long LL; LL l,r,Max;
char bit_l[];
char bit_r[];
char temp[]; LL StrToNum(char s[])//二进制字符变数字
{
int len=strlen(s);
LL ans=,res=;
for (int i=len-;i>=;i--)
{
if (s[i]=='')
ans+=res;
res*=;
}
return ans;
} void NumToStr(LL x)//数字变二进制字符串
{
if (x==)
{
temp[]='';
temp[]='\0';
return ;
}
char s[];
int pos=;
while (x!=)
{
int tt=x%;
if (tt==)
s[pos++]='';
else if (tt==)
s[pos++]='';
x/=;
}
s[pos]='\0';
int i;
for (i=;i<pos;i++)
temp[i]=s[pos--i];
temp[i]='\0';
} int main()
{
int i,j,t;
char test[];
scanf("%d",&t);
while (t--)
{
Max=-;
scanf("%I64d%I64d",&l,&r);
if (l==r)
{
printf("%lld\n",l|r);
continue;
}
NumToStr(l);
strcpy(bit_l,temp);
NumToStr(r);
strcpy(bit_r,temp); strcpy(test,bit_r);
int len_l=strlen(bit_l);
int len_r=strlen(bit_r);
for (i=;i<len_r-len_l;i++)
{
test[i]='';
}
for (j=;j<=len_l;j++)
{
test[i++]=bit_l[j];
}
strcpy(bit_l,test);
for (i=;i<len_r;i++)
{
if (bit_l[i]==''||bit_r[i]=='')
test[i]='';
else
test[i]='';
}
test[i]='\0';
LL res;
res=StrToNum(test);
if (res>Max) Max=res;
//printf("l : %s\n",bit_l);
//printf("r : %s\n",bit_r);
//printf("t : %s\n",test);
int k=;
while (bit_l[k]==bit_r[k]) k++;
k++;
for (i=k;i<len_r;i++)
{
res=StrToNum(test);
if (res>Max) Max=res;
if (bit_l[i]==''&&bit_r[i]=='')
{
test[i]='';
res=StrToNum(test);
if (res>Max)
Max=res;
}
}
printf("%I64d\n",Max);
}
return ;
}

hdu 5969 最大的位或的更多相关文章

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

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

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

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

  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 (合肥)区域赛签到题...orz 题意:给你l,r,求x|y的max,x,y满足l<=x<=y ...

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

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

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

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

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

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

  8. HDU 5969 最大的位或 题解

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

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

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

随机推荐

  1. 线性判别分析(Linear Discriminant Analysis, LDA)算法初识

    LDA算法入门 一. LDA算法概述: 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discrimin ...

  2. vim+python

    #!/bin/bash # install fisa vim config echo '===============================' echo 'start to install ...

  3. awk使用记录

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  4. asp.net原理笔记----页面控件类型,页面状况和asp.net编译过程

    通过查看asp.net的整个生命周期之后 了解到在aspx的页面生命周期中 调用了BuildControlTree()方法生成页面控件树 之后再调用Rend()方法根据控件树生成html返回 aspx ...

  5. 通过脚本发送zabbix邮件报警

    zabbix原生的报警媒介类型中,邮件报警是我们常用的方式.当我们在CentOS6上面安装zabbix3.0并配置邮件报警的时候,在邮件配置正确的前提下,不管触发器如何触发,邮件总是发送不出去,但是在 ...

  6. redis-cli使用密码登录

    redis-cli使用密码登录 注意IP地址要写正确! 学习了: https://blog.csdn.net/lsm135/article/details/52932896 https://blog. ...

  7. 【原创】关于bug反正出现的问题可能

    bug修正的问题:1. xib问题.2. 模块不清同时修改.3. svn代码合并的修改熟悉程度.4. 禁止全局格式化代码.

  8. 倍福TwinCAT(贝福Beckhoff)基础教程2.2 TwinCAT常见类型使用和转换_数组

    声明和实例化数组的方法如下,你可以声明各种基本类型的数组 i: INT; array1: ARRAY [0..500] OF INT;   FOR i := 0 TO 5000 DO     arra ...

  9. Gradle学习小结

    build.gradle(依赖配置) // 普通java工程 apply plugin: 'java' // Idea工程 apply plugin: 'idea' // war工程,需要有webap ...

  10. 合并apk和odex

    Android的ROM中有很多odex文件,相对于APK中的dex文件而言这个odex有什么作用呢? 如果你仔细观察会发现文件名时一一对应的,同时那些对应的apk文件中没有dex文件.这样做可以使其厂 ...