优化这段代码#include <bits/stdc++.h> int popcount(long long num) { std::bitset<64> bit(num); return bit.count(); } long long nextValidNumber(long long num) { while (popcount(num) >= 3) { num++; } return num; } int main() { int T; std::cin >> T; for (int i = 0; i < T; i++) { long long num; std::cin >> num; if (popcount(num) >= 3) { std::cout << "No,Commander" << std::endl; } else { long long nextNum = nextValidNumber(num + 1); std::cout << nextNum << std::endl; } } return 0; }
时间: 2024-04-08 08:33:47 浏览: 88
这段代码已经相对简洁和高效了,但可以进一步优化。以下是对代码的一些优化建议:
1. 不需要包 `<bits/stdc++.h>`,只需要包需要的头文件即可。
2. 可以使用__builtin_popcountll` 内函数来计算一个数的二进制中1的个数,而不需要使用 `std::bitset`。
3. 在 `nextValidNumber`中,可以直接通过位操作来判断一个数是否合法,而不需要逐个递增。
4. 可以使用 `fastio` 来加速输入输出操作。
优化后的代码如下:
```cpp <iostream>
int popcount(long long num) {
return __builtin_popcountll(num);
}
long long nextValidNumber(long long num) {
while (popcount(num) >= 3) {
num += num & -num; // 直接找到下一个合法的数
}
return num;
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int T;
std::cin >> T;
for (int i = 0; i < T; i++) {
long long num;
std::cin >> num;
if (popcount(num) >= 3) {
std::cout << "No,Commander" << '\n';
} else {
long long nextNum = nextValidNumber(num + 1);
std::cout << nextNum << '\n';
}
}
return 0;
}
```
这样的优化可以提高代码的效率和性能。
阅读全文