题解
2025-07-13 17:36:48
发布于:广东
47阅读
0回复
0点赞
代码附有注释,已有缩进,直接复制即可
#include <iostream>
#include <unordered_set>
using namespace std;
// 计算幂和数的数量
int countPowerSum(int l, int r) {
unordered_set<int> powerSet;
// 先预计算出可能的 2 的幂次值并存储在集合中,最大到 2^14 (因为 2^14 + 2^14 = 262144 ,而 r 最大为 10^4 ,所以计算到 2^14 足够)
for (int i = 0; i <= 14; ++i) {
for (int j = i; j <= 14; ++j) { // 避免重复计算,j 从 i 开始,保证 i <= j,这样 2^i + 2^j 和 2^j + 2^i 是一样的
int num = (1 << i) + (1 << j);
powerSet.insert(num);
}
}
int count = 0;
for (int num = l; num <= r; ++num) {
if (powerSet.count(num)) {
count++;
}
}
return count;
}
int main() {
int l, r;
cin >> l >> r;
cout << countPowerSum(l, r) << endl;
return 0;
}
这里空空如也
有帮助,赞一个