最大的位或

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 18    Accepted Submission(s): 17

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
题意:中文题面
题解:被选择的两个数中,其中的一个数一定是区间的上界,寻找另一个数 初始全部为1 从高位到低位模拟。
 #include<iostream>
#include<cstdio>
#define ll __int64
using namespace std;
ll l,r;
int t;
int s1[];
int s2[];
int s3[];
int len=;
int len1=;
bool cmp1( int * ss,int *tt)
{
for(int i=len-; i>=; i--)
{
if(ss[i]==tt[i])
continue;
if(ss[i]>tt[i])
return true;
if(ss[i]<tt[i])
return false;
}
return true;
}
bool cmp2( int * ss,int *tt)
{
for(int i=len-; i>=; i--)
{
if(ss[i]==tt[i])
continue;
if(ss[i]>tt[i])
return false;
if(ss[i]<tt[i])
return true;
}
return true;
}
void ans()
{
for(int i=len-; i>=; i--)
{
if(s2[i]==||s1[i]==)
s1[i]=;
}
ll exm=;
ll re=;
for(int i=; i<=len-; i++)
{
if(s1[i])
re+=exm;
exm*=;
}
cout<<re<<endl;
}
int main()
{
scanf("%d",&t);
for(int i=; i<=t; i++)
{
int flag=;
len=;
len1=;
scanf("%I64d %I64d",&l,&r);
ll zha=r;
while(r>)
{
if(r&)
s1[len++]=;
else
s1[len++]=;
r>>=;
}
for(int j=; j<len; j++)
{
s2[j]=;
s3[j]=;
}
while(l>)
{
if(l&)
s3[len1++]=;
else
s3[len1++]=;
l>>=;
}
for(int j=len-; j>=; j--)
{
if(s1[j]==)
continue;
if(s1[j]==)
{
s2[j+]=;
if(cmp1(s2,s3)&&cmp2(s2,s1))
{
ans();
flag=;
break;
}
else
{
s2[j+]=s1[j+];
s2[j]=s1[j];
}
}
}
if(flag==)
cout<<zha<<endl;
}
return ;
}
 

2016年中国大学生程序设计竞赛(合肥)-重现赛1009 HDU 5969的更多相关文章

  1. 2016年中国大学生程序设计竞赛(合肥)-重现赛1001 HDU 5961

    传递 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  2. 2016年中国大学生程序设计竞赛(合肥)-重现赛1008 HDU 5968

    异或密码 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  3. HDU 5963 朋友 【博弈论】 (2016年中国大学生程序设计竞赛(合肥))

    朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Descr ...

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

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

  5. HDU 5968 异或密码 【模拟】 2016年中国大学生程序设计竞赛(合肥)

    异或密码 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Des ...

  6. HDU 5961 传递 【图论+拓扑】 (2016年中国大学生程序设计竞赛(合肥))

    传递 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)     Problem ...

  7. HDU 5965 扫雷 【模拟】 (2016年中国大学生程序设计竞赛(合肥))

    扫雷 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  8. HDU 5937 Equation 【DFS+剪枝】 (2016年中国大学生程序设计竞赛(杭州))

    Equation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  9. HDU 5936 Difference 【中途相遇法】(2016年中国大学生程序设计竞赛(杭州))

    Difference Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

随机推荐

  1. Count Primes - LeetCode

    examination questions Description: Count the number of prime numbers less than a non-negative number ...

  2. 【Android】Spinner使用

    Spinner:下拉列表,主要用于显示一些选项供用户选择,类似PC应用程序里面的Combobox. 使用Spinner需要以下条件: 1.一个 Spinner 控件 2.数据 3.一个Adapter ...

  3. Sprint(第二天11.15)

    Sprint1第一阶段 1.类名:软件工程-第一阶段 2.时间:11.14-11.23 3.选题内容:点餐系统 4.团队博客地址:http://www.cnblogs.com/iamCarson/ 团 ...

  4. java练习题(字符串类):显示4位验证码、输出年月日、从XML中抓取信息

    1.显示4位验证码 注:大小写字母.数字混合 public static void main(String[] args) { String s="abcdefghijklmnopqrstu ...

  5. js实现手机号码和身份证号码校验

    <script type="text/javascript"> function checkform() { var re; var ss = document.get ...

  6. JavaScript学习笔记及知识点整理_1

    一.js的基础部分 1.==和===的区别:==在判断是否相等的时候会进行类型转换,有时会得到非常奇怪的结果,因此一般情况下都是用===判断是否相等2.strict模式:在js中,如果一个变量没有用v ...

  7. 转!!XML,DTD,XSD,XSL的区别

    XML=可扩展标记语言(eXtensible Markup Language).可扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可用 方便的方式建立,虽然XML占 ...

  8. 超越线程池:Java并发并没有你想的那么糟糕

    转载: 超越线程池:Java并发并没有你想的那么糟糕

  9. 将java源文件制成jar包

    很多人都在苦恼,如何将写好的程序代码能在日后随时调用和配置在项目中运行 今天,就让梦逸来给大家分享这个过程 首先,创建好一个文件夹,文件夹名称随意 这个文件夹中是用来存放java源文件( 未编译的 x ...

  10. 并发编程 05—— Callable和Future

    Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...