您的位置:首页 > 其它

UVA - 10718 Bit Mask

2014-10-16 21:16 260 查看
题目大意:给出一个  N, 和一个下限 L, 上限 U, 在 [L, U] 之间找一个数, 使得这个数与 N 做或运算之后的数值最大 输出这个数。

解题思路:将 U 转换成二进制,对应的为 0 的地方要填 1, 为 1 的地方填 0, 判断的时候还要考虑上下限的问题。

#include <cstdio>
#include <cmath>

int main() {
unsigned int N, L, U, M;
while (scanf("%u%u%u", &N, &L, &U) != EOF) {
M = 0;
for (int i = log2(U); i >= 0; i--)
if ( (M + (1 << i)) <= U && !(N & 1 << i) || M < L && L & 1 << i )
M += 1 << i;
printf("%u\n", M);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: