题目: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. redmine 出口中国的乱码

    pdf 这是redmine的bug.必须在个人账户更改将设立中国语文,足够的人才来解决. 顺便说一下,提示.以下更改文件的方法是无效的 /home/redmine/redmine-2.5.1/lib/ ...

  2. Directx11学习笔记【三】 第一个D3D11程序

    在先前的解决方案中新建一个新的Win32项目FirstD3D11Demo.在写代码之前,我们必须先添加dx11所需要的库.为了链接dx库,右键项目选择属性->vc++目录,在包含目录中添加你所安 ...

  3. ios 多线程开发(二)线程管理

    线程管理 iOS和OS X中每一个进程(或程序)由一个或多个线程组成.程序由一个运行main方法的线程开始,中间可以产生其他线程来执行一些指定的功能. 当程序产生一个新线程后,这个线程在程序进程空间内 ...

  4. rhel6使用的版本数部分intel xeon处理器时间bug

    可惜在总前几天"oracle操作和维护的高级别小组"于.BBQ 上帝说,大量RHEL的bug.这bug在这个例子中,下面的URL: https://access.redhat.co ...

  5. 90社交网络的行为报告后:不拒绝陌生人,TFBOYS作为一个喜爱

    依据腾讯QQ与易观合作的<2014中国90后青年调查报告>,盘点了90后使用社交网络的行为习惯. 相比于70.80后.90后更愿意在社交媒体上公布自己照片.状态,且更愿意在即时通讯中加陌生 ...

  6. 讲座:html5于canvas疯狂的炮轰实现

    <html> <head> <title>坎农</title> <script src="../js/jscex.jscexRequir ...

  7. 非阻塞IOserver型号

    让我们来考虑一个场景,你和百万玩家的魔兽世界的忠实粉丝.时间之旅打每到周末boss. 每当周末比赛server在亚历山大,因为至少在同一时间数十万用户在线. 假设我们的多-threaded果酱serv ...

  8. MKNetWorkKit打印URL

    -(void)initNewUrl:(NSString *)urlString param:(NSMutableDictionary *)_paramDic{ //拼接參数至URL NSMutable ...

  9. c#委托实例化和调用语句

    系统訪问数据或调用方法有两种操作方式:一种是通过名称訪问或调用,还有一种是通过所在的内存地址来訪问调用.为了系统的安全与稳定,NET Framework的CLR库不同意程序通过指针来直接操作内存中数据 ...

  10. SQL Server 2005------函数

    原文:SQL Server 2005------函数 SQL Server 2005支持用户自定义函数和内置系统函数,根据返回值类型又分为标量函数和表值函数. 1.标量函数标量函数:返回单个数据值,返 ...