好贷网好贷款

uva 10718 Bit Mask

发布时间:2016-12-5 0:33:25 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"uva 10718 Bit Mask",主要涉及到uva 10718 Bit Mask方面的内容,对于uva 10718 Bit Mask感兴趣的同学可以参考一下。

题意:求出最小的M使得,M|N最大,如果有相同的求最小的M,首先都先转化二进制是明显的,然后我们从N的最高位开始一位位的判断 1.如果N[i] = 1,为了满足M尽量小,可以让M[i] = 0, 2.当N[i] = 1,为了满足M最大,那么M[i] = 1,当然还有条件是M必须在[L,U]之间,所以如果小于L,那么这一位就必须是1,相反大于U,那么就必须是0,最后找到满足的1就可以得到答案了 #include <cstdio> #include <cmath> #include <iostream> using namespace std; int main() { unsigned n,l,r,tt,ans; while (scanf("%u%u%u",&n,&l,&r) != EOF) { int maxbit = 0; tt =r; while (tt) { maxbit++; tt /= 2; } maxbit -= 1; ans = 0; for (int i = maxbit; i >= 0; i--) { tt = ans + (1 << i); if(( tt <= r && (n & 1<<i) == 0) || (ans < l && (l & 1<<i))) ans = tt; } printf("%u\n",ans); } return 0; }

上一篇:员工最不喜欢的领导
下一篇:程序员的十层楼,看看你在哪一层

相关文章

关键词: uva 10718 Bit Mask

相关评论