官方题解|统计区间内奇数与偶数的数量
2024-09-09 13:14:22
发布于:浙江
33阅读
0回复
0点赞
题目解析
对于每个查询,若直接使用循环暴力统计 内的奇数或偶数,时间复杂度为 。本题 。暴力统计会超出时间限制。
我们不妨思考一个问题:给定任意正整数 ,求 中所有「奇数」的数量,如何解决这个问题?
不妨枚举,打表找找规律,。
分类讨论一下:
- 当 为「奇数」时,那么显然一共有 个「奇数」;
- 当 为「偶数」时,那么显然一共有 个「奇数」;
- 由于
C++
中整数做除法自动抹除小数,所以可以统一写成 。
那么我可以考虑使用「前缀和」的思想,计算出 中「奇数」的数量 和 中「奇数」的数量 ,那么 中「奇数」的数量为 。
统计「偶数」的数量同理。
AC代码
C++
代码:
#include <bits/stdc++.h>
int main() {
int _; std::cin >> _;
while (_--) {
int t, l, r;
std::cin >> t >> l >> r;
auto odd = [](int x) {return x + 1 >> 1;};
auto even = [](int x) {return x >> 1;};
std:: cout << (t == 1 ? odd(r) - odd(l-1) : even(r) - even(l-1)) << '\n';
}
return 0;
}
Python
代码:
for _ in range(int(input())):
t, l, r = map(int, input().split())
odd = lambda x: x + 1 >> 1
even = lambda x: x >> 1
print(odd(r) - odd(l-1) if t == 1 else even(r) - even(l-1))
这里空空如也
有帮助,赞一个