#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; } |
English