题目: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]) { //都是 0 if (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]) { //都是1 if (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. UVA 10718 Bit Mask 贪心+位运算

    题意:给出一个数N,下限L上限U,在[L,U]里面找一个整数,使得N|M最大,且让M最小. 很明显用贪心,用位运算搞了半天,样例过了后还是WA,没考虑清楚... 然后网上翻到了一个人家位运算一句话解决 ...

  2. uva 10718 Bit Mask(贪心)

    题目连接:10718 Bit Mask 题目大意:给出一个T, 和一个下限L, 上限R, 在[L, R]之间找一个数, 使得这个数与T做或运算之后的数值最大 输出这个数. 解题思路:将T转换成二进制, ...

  3. 小总结:快速幂+贪心————Bit Mask____UVA 10718 多多去理解去温习哦!

    传送门:https://vjudge.net/problem/UVA-10718 Preview: bitstream:a flow of data in binary form. in bit-wi ...

  4. Codeforces1203F2. Complete the Projects (hard version) (贪心+贪心+01背包)

    题目链接:传送门 思路: 对于对rating有提升的项目,肯定做越多越好,所以把$b_{i} >= 0$的项目按rating要求从小到大贪心地都做掉,得到最高的rating记为r. 对于剩余的$ ...

  5. Codeforces 1208F Bits And Pieces 位运算 + 贪心 + dp

    题意:给你一个序列a, 问a[i] ^ (a[j] & a[k])的最大值,其中i < j < k. 思路:我们考虑对于每个a[i]求出它的最优解.因为是异或运算,所以我们从高位向 ...

  6. 贪心/构造/DP 杂题选做Ⅱ

    由于换了台电脑,而我的贪心 & 构造能力依然很拉跨,所以决定再开一个坑( 前传: 贪心/构造/DP 杂题选做 u1s1 我预感还有Ⅲ(欸,这不是我在多项式Ⅱ中说过的原话吗) 24. P5912 ...

  7. BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1383  Solved: 582[Submit][St ...

  8. HDOJ 1051. Wooden Sticks 贪心 结构体排序

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  9. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

随机推荐

  1. 在 VS 类库项目中 Add Service References 和 Add Web References 的区别

    原文:在 VS 类库项目中 Add Service References 和 Add Web References 的区别 出身问题: 1.在vs2005时代,Add Web Reference(添加 ...

  2. MongoDB:逐渐变得无关紧要

    我与MongoDB的关系可分为三个阶段.对于目前处于第三阶段的我来说,这款产品似乎变得无关紧要了.很快你就会明白为什么我这么说. 阶段一:痴迷 我与MongoDB的第一次接触十分神奇:一个poligl ...

  3. 做一个自动修改本机IP和mac的bat文件

    原文:做一个自动修改本机IP和mac的bat文件 1.ip bat修改理论探讨 前两天我突然萌生了一个念头:能不能做一个小程序来实现自动配置或修改IP和mac,达到一键搞定的目的,这样尤其适合那些带着 ...

  4. mysql 多个字段拼接

    Mysql的查询结果行字段拼接,能够用以下两个函数实现: 1. concat函数 mysql> select concat('1','2','3') from test ; +--------- ...

  5. UVa10000_Longest Paths(最短路SPFA)

    解题报告 求最长路. 用SPFA求最长路,初始化图为零,dis数组也为零 #include <iostream> #include <cstdio> #include < ...

  6. 【转】linux建立软链接

    实例:ln -s /home/gamestat    /gamestat linux下的软链接类似于windows下的快捷方式 ln -s a b 中的 a 就是源文件,b是链接文件名,其作用是当进入 ...

  7. 【Java技术位】——代理模式及其事务包

    背景 项目中我们会遇到这种情况:在几个方法中增加同样的代码,这些代码是与业务无关的,而且以后有可能因为考虑不周或需求变动再或者是其它原因,我们须要对他们进行逐一进行修改.举个详细的样例,比方程序中的日 ...

  8. 基于android 社会的app短信分享 发送回调事件的实现

    摘要 前一段时间.由于项目的需要,采用ShareSDK该共享功能.其中包含 短信股吧.和呼叫系统,以分享要与成功处理服务器交互的消息后,(我不在乎在这里,收到.仅仅关心发出去了).可是ShareSDk ...

  9. DEMO阶段已完成,今天,要深入钻

    今天老师整理我的代码,发现,当时我没搞清楚这是正常的,由于我没有在一开始发挥到其翻译,而没有分析. 只要,研究底部是正确的.为了更好地理解代码. 上午:OSGEARTH视频教程. 上午,DX11机械仿 ...

  10. HDU3988-Harry Potter and the Hide Story(数论-质因数分解)

    Harry Potter and the Hide Story Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 ...