#include <iostream> #include <bitset> #include <utility> #include <string> using namespace std; const int mxN = 1e6; bitset<17> x; pair<int, int> dp[mxN]; int jedynki(int a) { int wyn = 0; x = a; for (int i = 0; i < 17; i++) wyn += x[i]; return wyn; } int jed(int a) { int wyn = 0; while (a != 0) { wyn += a % 2; a = a >> 1; } return wyn; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; dp[1] = { 1, -1 }; int nr = 2, ile = 1; for (int i = 2; i <= n; i++) { if (dp[i - ile].first == nr) { nr++; ile = jed(nr); } dp[i] = { nr, i - ile }; } string s = ""; int i = 0; while (n != -1) { s += to_string(dp[n].first); s += ' '; n = dp[n].second; i++; } cout << i << '\n' << s; 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 | #include <iostream> #include <bitset> #include <utility> #include <string> using namespace std; const int mxN = 1e6; bitset<17> x; pair<int, int> dp[mxN]; int jedynki(int a) { int wyn = 0; x = a; for (int i = 0; i < 17; i++) wyn += x[i]; return wyn; } int jed(int a) { int wyn = 0; while (a != 0) { wyn += a % 2; a = a >> 1; } return wyn; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; dp[1] = { 1, -1 }; int nr = 2, ile = 1; for (int i = 2; i <= n; i++) { if (dp[i - ile].first == nr) { nr++; ile = jed(nr); } dp[i] = { nr, i - ile }; } string s = ""; int i = 0; while (n != -1) { s += to_string(dp[n].first); s += ' '; n = dp[n].second; i++; } cout << i << '\n' << s; return 0; } |