2013年9月3日

UVa 10718 - Bit Mask

#include <cstdio>

int main() {
  long long N, L, U, bits[33] = {1};
  for (int b = 1; b < 33; b++) {
    bits[b] = bits[b - 1] << 1;
  }
  while (scanf("%lld%lld%lld", &N, &L, &U) == 3 ) {
    long long ans = 0;
    for (int b = 32; b >= 0; b--) {
      if (N & bits[b]) {
        if (ans + bits[b] <= L) {
          ans += bits[b];
        }
      } else if (ans + bits[b] <= U) {
        ans += bits[b];
      }
    }
    printf("%lld\n", ans);
  }
  return 0;
}

沒有留言:

張貼留言