#include <bits/stdc++.h>
using namespace std;
int main(){
//int a; cin >> a;
//cout << __builtin_popcount(a) << endl;
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
int n; cin >> n;
vector <int> ziomale;
vector <bool> biore;
int temp = 0;
int obec = 0;
while(temp < n){
obec ++;
temp += __builtin_popcount(obec);
ziomale.push_back(obec);
biore.push_back(true);
}
//teraz pora wyrównac szanse
/*for(int a : ziomale){
cout << a << " ";
}
cout << endl << endl;*/
int j = 0;
int ziomalskirozmiar = ziomale.size();
reverse(ziomale.begin(), ziomale.end());
reverse(biore.begin(), biore.end());
while(temp != n){
if(temp - __builtin_popcount(ziomale[j]) >= n){
ziomalskirozmiar --;
temp -= __builtin_popcount(ziomale[j]);
biore[j] = false;
}
j++;
}
cout << ziomalskirozmiar << endl;
for(int i=0; i<ziomale.size(); i++){
if(biore[i] == true)
cout << ziomale[i] << " ";
}
}
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 | #include <bits/stdc++.h> using namespace std; int main(){ //int a; cin >> a; //cout << __builtin_popcount(a) << endl; ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); int n; cin >> n; vector <int> ziomale; vector <bool> biore; int temp = 0; int obec = 0; while(temp < n){ obec ++; temp += __builtin_popcount(obec); ziomale.push_back(obec); biore.push_back(true); } //teraz pora wyrównac szanse /*for(int a : ziomale){ cout << a << " "; } cout << endl << endl;*/ int j = 0; int ziomalskirozmiar = ziomale.size(); reverse(ziomale.begin(), ziomale.end()); reverse(biore.begin(), biore.end()); while(temp != n){ if(temp - __builtin_popcount(ziomale[j]) >= n){ ziomalskirozmiar --; temp -= __builtin_popcount(ziomale[j]); biore[j] = false; } j++; } cout << ziomalskirozmiar << endl; for(int i=0; i<ziomale.size(); i++){ if(biore[i] == true) cout << ziomale[i] << " "; } } |
English