UVA - 10718 Bit Mask
2014-10-16 21:16
260 查看
题目大意:给出一个 N, 和一个下限 L, 上限 U, 在 [L, U] 之间找一个数, 使得这个数与 N 做或运算之后的数值最大 输出这个数。
解题思路:将 U 转换成二进制,对应的为 0 的地方要填 1, 为 1 的地方填 0, 判断的时候还要考虑上下限的问题。
解题思路:将 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; }
相关文章推荐
- UVa 10718 - Bit Mask
- uva10718 Bit Mask
- UVA - 10718 Bit Mask(贪心+位运算)
- UVa10718 - Bit Mask(不错的贪心)
- UVA 10718 Bit Mask
- UVA 10718 Bit Mask
- UVA - 10718 Bit Mask
- UVa 10718 - Bit Mask
- UVa 10718 - Bit Mask
- uva 10718 - Bit Mask
- UVa 10718 Bit Mask (贪心&位运算)
- UVA 10718 Bit Mask (快速幂 + 贪心)
- uva 10718 Bit Mask
- UVA 10718 Bit Mask
- UVA 10718 Bit Mask
- [贪心]UVA10718 Bit Mask
- uva 10718 Bit Mask
- UVa 10718 - Bit Mask
- UVA 10718 Bit Mask
- uva 10718 Bit Mask (位运算)