#include <bits/stdc++.h> using namespace std; long long to_binary(long long n) { int one_count = 0; while (n != 0) { if (n % 2 == 1) one_count++; n /= 2; } return one_count; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, one_count = 0, power_of_2 = 0, tmp = 0; long long num = 1; cin >> n; vector<long long> res; while (n > 0) { one_count = to_binary(num); tmp = log2(num); if (pow(2, tmp) == num) power_of_2++; if (n - power_of_2 == 1 || n - power_of_2 == 0) { res.push_back(pow(2, power_of_2) - 1); num = pow(2, power_of_2) - 1; n -= power_of_2; } else if (one_count <= n) { res.push_back(num); n -= one_count; } num++; } cout << res.size() << "\n"; for (int i = res.size() - 1; i >= 0; i--) cout << res[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 38 39 40 41 42 43 44 45 46 47 48 49 | #include <bits/stdc++.h> using namespace std; long long to_binary(long long n) { int one_count = 0; while (n != 0) { if (n % 2 == 1) one_count++; n /= 2; } return one_count; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, one_count = 0, power_of_2 = 0, tmp = 0; long long num = 1; cin >> n; vector<long long> res; while (n > 0) { one_count = to_binary(num); tmp = log2(num); if (pow(2, tmp) == num) power_of_2++; if (n - power_of_2 == 1 || n - power_of_2 == 0) { res.push_back(pow(2, power_of_2) - 1); num = pow(2, power_of_2) - 1; n -= power_of_2; } else if (one_count <= n) { res.push_back(num); n -= one_count; } num++; } cout << res.size() << "\n"; for (int i = res.size() - 1; i >= 0; i--) cout << res[i] << " "; return 0; } |