#include <iostream> #include <fstream> #include <vector> using namespace std; int sumbin(int k){ int zw=0; while(k){ zw+=k%2; k>>=1; } return zw; } int ss[1000001]; int mins[1000001]; void genss(){ ss[0]=0; for(int i=1; i<=1000000; i++) ss[i]=ss[i-1]+sumbin(i); int j=0; for(int i=0; i<=1000000; i++){ while(j<=ss[i] && j<=1000000){ mins[j]=i; j++; } } } int n; int main() { genss(); scanf("%d",&n); vector<int> odp; while(n){ odp.push_back(mins[n]); //printf("%d ", mins[n]); n-=sumbin(mins[n]); } printf("%d\n", (int) odp.size()); for(int i=0; i<odp.size(); i++){ printf("%d ", odp[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 <iostream> #include <fstream> #include <vector> using namespace std; int sumbin(int k){ int zw=0; while(k){ zw+=k%2; k>>=1; } return zw; } int ss[1000001]; int mins[1000001]; void genss(){ ss[0]=0; for(int i=1; i<=1000000; i++) ss[i]=ss[i-1]+sumbin(i); int j=0; for(int i=0; i<=1000000; i++){ while(j<=ss[i] && j<=1000000){ mins[j]=i; j++; } } } int n; int main() { genss(); scanf("%d",&n); vector<int> odp; while(n){ odp.push_back(mins[n]); //printf("%d ", mins[n]); n-=sumbin(mins[n]); } printf("%d\n", (int) odp.size()); for(int i=0; i<odp.size(); i++){ printf("%d ", odp[i]); } return 0; } |