diff --git a/thu20252c.cpp b/thu20252c.cpp new file mode 100644 index 0000000..7ebac71 --- /dev/null +++ b/thu20252c.cpp @@ -0,0 +1,29 @@ +#include +#include +#include + +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; +} \ No newline at end of file