#include <cstdio>
#include <vector>
int getBitCount(unsigned int u) {
unsigned int uCount;
uCount = u - ((u >> 1) & 033333333333) - ((u >> 2) & 011111111111);
return ((uCount + (uCount >> 3)) & 030707070707) % 63;
}
int main() {
int N;
int sum = 0;
int curr = 0;
std::vector<int> result;
scanf("%d", &N);
while (sum <= N) {
curr++;
sum += getBitCount(curr);
}
for (int v=curr; v>=1; v--) {
int k = getBitCount(v);
if (sum-k>=N) {
sum-=k;
} else {
result.push_back(v);
}
}
printf("%d\n", (int)result.size());
for (int i=0; i<result.size(); ++i) {
printf("%d ", result[i]);
}
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 | #include <cstdio> #include <vector> int getBitCount(unsigned int u) { unsigned int uCount; uCount = u - ((u >> 1) & 033333333333) - ((u >> 2) & 011111111111); return ((uCount + (uCount >> 3)) & 030707070707) % 63; } int main() { int N; int sum = 0; int curr = 0; std::vector<int> result; scanf("%d", &N); while (sum <= N) { curr++; sum += getBitCount(curr); } for (int v=curr; v>=1; v--) { int k = getBitCount(v); if (sum-k>=N) { sum-=k; } else { result.push_back(v); } } printf("%d\n", (int)result.size()); for (int i=0; i<result.size(); ++i) { printf("%d ", result[i]); } return 0; } |
English