20252c
This commit is contained in:
29
thu20252c.cpp
Normal file
29
thu20252c.cpp
Normal file
@@ -0,0 +1,29 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user