hdu 5969 最大的位或(贪心)
给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大。
其中|表示按位或,即C、 C++、 Java中的|运算。
第一行有一个正整数,表示数据的组数。
接下来每一行表示一组数据,包含两个整数l,r。
保证 0 <= l <= r <= 1018。
题目是中文的题意就不解释了
大致还是贪心的思想,两个数异或有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 最大的位或(贪心)的更多相关文章
- HDU 5969 最大的位或 —— 贪心 + 二进制的理解
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5969 最大的位或 Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5969 最大的位或 (思维,贪心)
HDU 5969 最大的位或 题目大意 B君和G君聊天的时候想到了如下的问题. 给定自然数\(l\)和\(r\) ,选取\(2\)个整数\(x,y\)满足\(l <= x <= y < ...
- HDU 5969 最大的位或 【贪心】 (2016年中国大学生程序设计竞赛(合肥))
最大的位或 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem De ...
- HDU 5969 最大的位或【贪心】
题目 B君和G君聊天的时候想到了如下的问题. 给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大. 其中|表示按位或,即C. C++. Ja ...
- HDU 5969 最大的位或【贪心/按位或/思维】
链接 最大的位或 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Subm ...
- 【贪心算法】HDU 5969 最大的位或
题目内容 Vjudge链接 给出一个闭区间,找该区间内两个数,使这两个数的按位或最大. 输入格式 包含至多\(10001\)组测试数据. 第一行有一个正整数,表示数据的组数. 接下来每一行表示一组数据 ...
- HDU - 5969 最大的位或 想法题
http://acm.hdu.edu.cn/showproblem.php?pid=5969 (合肥)区域赛签到题...orz 题意:给你l,r,求x|y的max,x,y满足l<=x<=y ...
- hdu 5969 最大的位或
最大的位或 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- HDU 5969 最大的位或 题解
题目 B君和G君聊天的时候想到了如下的问题. 给定自然数l和r ,选取2个整数\(x,y\)满足\(l <= x <= y <= r\),使得\(x|y\)最大. 其中\(|\)表示 ...
随机推荐
- Java 求字符串中出现频率最高字符
前段时间接触的这个题目,大体理解了,还有些小地方仍待进一步品味,暂且记下. import java.util.ArrayList; import java.util.Arrays; import ja ...
- python协程详解
目录 python协程详解 一.什么是协程 二.了解协程的过程 1.yield工作原理 2.预激协程的装饰器 3.终止协程和异常处理 4.让协程返回值 5.yield from的使用 6.yield ...
- Python基础总结之认识lambda函数、map函数、filter() 函数。第十二天开始(新手可相互督促)
今天周日,白天在学习,晚上更新一些笔记,希望对大家能更好的理解.学习python~ lambda函数,也就是大家说的匿名函数.它没有具体的名称,也可以叫做一句话函数,我觉得也不过分,大家看下代码,来体 ...
- MapReduce 运行全过程解析
关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 前言 前面我们讲了 MapReduce 的编程模型,我们知道他主要分成两大阶段来完成一项任务,一是 m ...
- SpringMVC学习笔记之---深入使用
SpringMVC深入使用 (一)基于XML配置的使用 (1)配置 1.SpringMVC基础配置 2.XML配置Controller,HandlerMapping组件映射 3.XML配置ViewRe ...
- [ubuntu][deepin]系统增加自定义开机启动项
[ubuntu][deepin]系统增加自定义开机启动项 进行配置 cd /etc/init.d/ ls vim myScript nginx实例 #! /bin/sh # chkconfig: # ...
- [转] java开源游戏
收藏一下 triplea Triplea是一个开放源码的boardgame.它允许玩家选择各种各样的战略版图游戏(如:轴心国或同盟军).TripleA引擎支持联网对战,支持声音,支持使用XML文 ...
- Powered by .NET Core 进展:用 docker-compose 验证高并发问题嫌疑犯 docker swarm
相关博文: [故障公告]发布 .NET Core 版博客站点引起大量 500 错误 [网站公告].NET Core 版博客站点第二次发布尝试 暴风雨中的 online : .NET Core 版博客站 ...
- 微信公众号发送消息给用户 php
1.微信公众号 这里得话 一开始先去看了 微信公众号的接口 发现网页授权需要时认证的服务号,一开始想的是那去申请一个认证的服务号岂不是很费事,然后网上搜了搜,发现了还有微信公众号个人测试号这个东西,所 ...
- DIY cnblog——背景渐变切换
进来的小伙伴应该已经看过了我的博客样式,但还是贴张图先: 先大致说一下实现的思路,然后把代码贴出来供小伙伴们参考. 由于不是特别技术性的文章,格式就放宽松一点,跟着意识流走吧. 先跟大家分享一个渐变背 ...