Files
Leetcode-100/thu20252c.cpp
2025-08-25 21:43:58 +08:00

29 lines
836 B
C++

#include <stdio.h>
#include <iostream>
#include <stdint.h>
uint64_t ceil_div_pow2(uint64_t a, uint64_t m) {
if (m == 0 || a == 0) return a;
if (m >= 64) return 1;
// ceil(a / (2^m)) = floor(a + 2^m - 1) / (2^m),这个方法可以把奇偶写在一起。
__uint128_t num = (__uint128_t)a + ((__uint128_t)1 << m) - 1;
return (uint64_t)(num >> m);
}
int main() {
int T;
uint32_t x, n, m;
scanf("%d", &T);
for (int _ = 0; _ < T; _++) {
scanf("%d %d %d", &x, &n, &m);
uint64_t min_ans = ceil_div_pow2(x, m);
min_ans = (n >= 64) ? 0 : (min_ans >> n);
uint64_t max_ans = (n >= 64) ? 0 : (x >> n);
max_ans = ceil_div_pow2(max_ans, m);
// printf("%llu %llu\n", min_ans, max_ans);
std::cout << min_ans << ' ' << max_ans << "\n";
}
return 0;
}