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