#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<fstream>
using namespace std;
vector <int> potegi = {524288,262144,131072,65536,32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2,1};
int ile_bitow(int a){
int wyn = 0;
for(int i = 0; i < 20; i++){
if(potegi[i] < a){
a -= potegi[i];
wyn++;
}
}
return wyn;
}
int main(){
vector <int> v(1000000);
int a = 1;
for(int i = 1; i <= 1000000;){
int pom = ile_bitow(a);
for(int j = 0; j < pom; j++){
v[i] = a;
i++;
}
a++;
}
int n;
cin >> n;
vector <int> wyn;
while(n > 0){
wyn.push_back(v[n]);
n -= ile_bitow(v[n]);
}
cout << wyn.size() << endl;
for(int i = 0; i < wyn.size();i++){
cout << wyn[i]-1 << " ";
}
}
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 | #include<iostream> #include<vector> #include<string> #include<algorithm> #include<fstream> using namespace std; vector <int> potegi = {524288,262144,131072,65536,32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2,1}; int ile_bitow(int a){ int wyn = 0; for(int i = 0; i < 20; i++){ if(potegi[i] < a){ a -= potegi[i]; wyn++; } } return wyn; } int main(){ vector <int> v(1000000); int a = 1; for(int i = 1; i <= 1000000;){ int pom = ile_bitow(a); for(int j = 0; j < pom; j++){ v[i] = a; i++; } a++; } int n; cin >> n; vector <int> wyn; while(n > 0){ wyn.push_back(v[n]); n -= ile_bitow(v[n]); } cout << wyn.size() << endl; for(int i = 0; i < wyn.size();i++){ cout << wyn[i]-1 << " "; } } |
English