#include <bits/stdc++.h>
using namespace std;
int bitsOf(int n) {
int count = 0;
while (n) {
count += n & 1;
n >>= 1;
}
return count;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int targetBits;
cin >> targetBits;
int i = 0;
int bitsSum = 0;
vector<int> numbers;
vector<int> bits;
while(true) {
numbers.push_back(++i);
int numberBits = bitsOf(i);
bits.push_back(numberBits);
bitsSum += numberBits;
if (bitsSum >= targetBits) {
break;
}
}
vector<int> result;
result.push_back(i);
for (int j = numbers.size() - 2; j >= 0; j--) {
if (bitsSum - bits[j] < targetBits) {
result.push_back(numbers[j]);
} else {
bitsSum -= bits[j];
}
}
cout << result.size() << endl;
for (int j = 0; j < result.size(); j++) {
cout << result[j];
if (j < result.size() - 1) {
cout << " ";
}
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <bits/stdc++.h> using namespace std; int bitsOf(int n) { int count = 0; while (n) { count += n & 1; n >>= 1; } return count; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int targetBits; cin >> targetBits; int i = 0; int bitsSum = 0; vector<int> numbers; vector<int> bits; while(true) { numbers.push_back(++i); int numberBits = bitsOf(i); bits.push_back(numberBits); bitsSum += numberBits; if (bitsSum >= targetBits) { break; } } vector<int> result; result.push_back(i); for (int j = numbers.size() - 2; j >= 0; j--) { if (bitsSum - bits[j] < targetBits) { result.push_back(numbers[j]); } else { bitsSum -= bits[j]; } } cout << result.size() << endl; for (int j = 0; j < result.size(); j++) { cout << result[j]; if (j < result.size() - 1) { cout << " "; } } return 0; } |
English