题目:uva10718 - Bit Mask(贪心)

题目大意:给出32位无符号的整数n ,给定边界L和R,要求在这个边界里面找出一个整数,它和N做或运算得到的值最大。

解题思路:要求做或运算得到的值最大,先N化成2进制的数,然后要使得结果最大的话,最好的就是【L,R】里面的某个数M能和N二进制数01互补.

比如: 00000111

那么M最好就是 11111000

当然这个M须要满足【L,R】内。

思路是M先先等于L,将L也转换成二进制数,然后和N的二进制,每一位都进行推断。

假设N的某i位上面是0,而M上相应的位也是0,那么能够考虑将M上的这一位变成1,可是的推断是否M在【L,R】区间内,假设超过了,那么另一种可能就是为了保全这个位而将后面的位置为0,这种M与N的结果肯定必保留后面的位的结果要大。

假设N上的某i位是1,而M上相应的也是1,那么依据题意要最小的M,这里就能够考虑能否去掉这个1,相同也是要保证在LR之间,假设较小了,也还是有一种策略:为了使得M的值更小,而且i位的结果仍然不变,能够将这一位1去掉,而将后面的全部的位全置为1。这样尽管后面可能有不须要的1,可是这个能够后面处理。

一个0一个1就是最好的状态了,不用处理。

要用 long long 。

代码:

#include <stdio.h>
#include <string.h>const int N = 32;
typedef long long ll;
ll t[N];
bool w1[N], w2[N];
//打表 二进制数每一位的单位
void init () {t[0] = 1;for (int i = 0; i < N - 1; i++)t[i + 1] = t[i] * 2;
}
//拆分成二进制数
void cut (ll n, bool w[]) {for (int i = N - 1; i >= 0; i--) {if (n >= t[i]) {w[i] = 1;n -= t[i];}}
}ll solve (ll l, ll r) {ll ans = l;for (int i = N - 1; i >= 0; i--) {if (!w1[i] && !w2[i]) {  //都是 0if (ans + t[i] <= r)ans += t[i];else {            ll temp = 0;for (int j = i - 1; j >= 0; j--)   //计算后面的位是1的if (w2[j])temp += t[j];if (ans + t[i] - temp >= l && ans + t[i] - temp <= r) {ans = ans + t[i] - temp; for (int j = i - 1; j >= 0; j--)w2[j] = 0;}}}if (w1[i] && w2[i]) {  //都是1if (ans - t[i] >= l)ans -= t[i];else {ll temp = 0;for (int j = i - 1; j >= 0; j--)    //计算后面位是0的if (!w2[j])temp += t[j];if (ans - t[i] + temp >= l && ans - t[i] + temp <= r) {ans = ans - t[i] + temp;for (int j = i - 1; j >= 0; j--)w2[j] = 1;}}}}return ans;
}int main () {ll n, l, r;init();while (scanf ("%lld%lld%lld", &n, &l, &r) != EOF) {memset(w1, 0, sizeof(w1));memset(w2, 0, sizeof(w2));cut(n, w1);cut(l, w2);printf ("%lld\n", solve(l, r));}return 0;
}

uva10718 - Bit Mask(贪心)相关推荐

  1. Competitive Programming 3题解

    题目一览: Competitive Programming 3: The New Lower Bound of Programming Contests(1) Competitive Programm ...

  2. AOAPC I: Beginning Algorithm Contests 题解

    AOAPC I: Beginning Algorithm Contests 题解 AOAPC I: Beginning Algorithm Contests (Rujia Liu) - Virtual ...

  3. Mask R-CNN用于目标检测和分割代码实现

    Mask R-CNN用于目标检测和分割代码实现 Mask R-CNN for object detection and instance segmentation on Keras and Tenso ...

  4. CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)

    CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020) 目标检测:FCOS(CVPR 2019) 目标检测算法FCOS(FCOS: ...

  5. 深度学习目标检测详细解析以及Mask R-CNN示例

    深度学习目标检测详细解析以及Mask R-CNN示例 本文详细介绍了R-CNN走到端到端模型的Faster R-CNN的进化流程,以及典型的示例算法Mask R-CNN模型.算法如何变得更快,更强! ...

  6. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  7. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  8. 使用Python,OpenCV制作图像Mask——截取ROIs及构建透明的叠加层

    使用Python,OpenCV制作图像Mask--截取ROIs及构建透明的叠加层 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用OpenCV制作Mask图像掩码.使用位运算和图像掩码允许我们只 ...

  9. 解决Mask RCNN自己航拍数据集训练的问题

    本片博客主要记录解决的一个问题: 承接上篇文章中最后列出的程序代码问题,今天终于解决了. Q:对于自己的同一个图片,比如DSC00083.jpg,我用opencv读取image.shape,结果如下: ...

最新文章

  1. 文件时间信息在测试中的应用
  2. 【springboot】spring-boot-devtools 热部署 导致 mvn spring-boot:run 出现异常
  3. php 安装 phpunit,phpunit的安装
  4. hihocoder1543 SCI表示法
  5. 关于TableView中图片的延时加载(转)
  6. drools 7.x定时器
  7. python 格式化字符串 模板字符串(五分钟读懂)
  8. Code Review 13 大必知必会,学习了!
  9. php模板和框架,php模板和框架的区别的区别是什么
  10. canvas-画图改进版
  11. Microsoft.AlphaImageLoader滤镜解说
  12. botley编程机器人测评_好物测评:五岁小孩都能上手的智能编程机器人有多好玩?动手又动脑!...
  13. opencv+ArcFace人脸识别
  14. 大数据是什么?大数据的定义?
  15. GridLayout 介绍 (转载自http://www.cnblogs.com/skywang12345/p/3154150.html)
  16. UML类图中实线虚线的指向关系
  17. java 提示语法错误_java常见语法错误
  18. Google谷歌新手SEO优化教程篇【1】
  19. PS之如何直接提取其他窗口或网页颜色
  20. 申请SSL证书需要多长时间

热门文章

  1. 如何从Mac OS X连接 ×××
  2. asp.net2.0学习历程 菜鸟到中级程序员的飞跃[z转]
  3. 速修复!热门代码覆盖率测试工具 Codecov 的脚本遭恶意修改,敏感信息被暴露...
  4. 【转】腾讯移动品质中心TMQ [腾讯 TMQ] 测试管理平台大比拼
  5. 在CentOS下搭建自己的Git服务器
  6. mysql install and config
  7. HDU 1034 - Candy Sharing Game
  8. 插头DP题目泛做(为了对应WYD的课件)
  9. Docker安装应用程序(Centos6.5_x64)
  10. Servlet打印HTML页面乱码问题