#include <bits/stdc++.h> using namespace std; int countSetBits( int n) { int count = 0; while (n) { count += n & 1; n >>= 1; } return count; } void ans(set<int> &G, int i, int liczn, int &n, vector<bool> &D){ while(liczn<n){ if(!D[i]) { liczn+=countSetBits(i); G.insert(i); D[i] = true; } if(liczn>n){ G.erase(i-1); D[i-1] = false; ans(G, i-1, liczn, n, D); } i++; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; int liczn = 0; int i = 1; set<int> G; vector<bool> D(1000000, 0); ans(G, i, liczn, n, D); cout << G.size() << "\n"; for(auto it = G.end(); it!=G.begin(); it--){ cout << *prev(it, 1) << " "; } cout << "\n"; 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 | #include <bits/stdc++.h> using namespace std; int countSetBits( int n) { int count = 0; while (n) { count += n & 1; n >>= 1; } return count; } void ans(set<int> &G, int i, int liczn, int &n, vector<bool> &D){ while(liczn<n){ if(!D[i]) { liczn+=countSetBits(i); G.insert(i); D[i] = true; } if(liczn>n){ G.erase(i-1); D[i-1] = false; ans(G, i-1, liczn, n, D); } i++; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; int liczn = 0; int i = 1; set<int> G; vector<bool> D(1000000, 0); ans(G, i, liczn, n, D); cout << G.size() << "\n"; for(auto it = G.end(); it!=G.begin(); it--){ cout << *prev(it, 1) << " "; } cout << "\n"; return 0; } |