#include <bits/stdc++.h> using namespace std; #ifdef D #define DEBUG(x) \ do { \ x \ cout.flush(); \ } while (0) #else #define DEBUG(x) #endif using ll = long long; const int NMAX = 1e6 + 7; int n, sum, m; int t[NMAX]; set<int> unused; int bitscnt(int a) { int r = 0; while (a) { r += a & 1; a >>= 1; } return r; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n; for (int i = 1; i <= n; ++i) { t[i] = bitscnt(i); } int i = 1; for (; sum < n; ++i) { sum += t[i]; } i--; m = i; for (; sum > n && i >= 0; --i) { if (sum - t[i] >= n) { sum -= t[i]; unused.insert(i); } } cout << m - unused.size() << "\n"; for (int j = m; j > 0; --j) { if (unused.count(j) == 0) { cout << j << " "; } } 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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #include <bits/stdc++.h> using namespace std; #ifdef D #define DEBUG(x) \ do { \ x \ cout.flush(); \ } while (0) #else #define DEBUG(x) #endif using ll = long long; const int NMAX = 1e6 + 7; int n, sum, m; int t[NMAX]; set<int> unused; int bitscnt(int a) { int r = 0; while (a) { r += a & 1; a >>= 1; } return r; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n; for (int i = 1; i <= n; ++i) { t[i] = bitscnt(i); } int i = 1; for (; sum < n; ++i) { sum += t[i]; } i--; m = i; for (; sum > n && i >= 0; --i) { if (sum - t[i] >= n) { sum -= t[i]; unused.insert(i); } } cout << m - unused.size() << "\n"; for (int j = m; j > 0; --j) { if (unused.count(j) == 0) { cout << j << " "; } } return 0; } |