#include <bits/stdc++.h> using namespace std; int n, pom, ilosc=0, tab[125000], suma; stack <int> S; set <int> cursed; int main() {ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (int i=1; i<=125000; i++){ S.push(i); ilosc++; pom=i; while (pom){ tab[i]+=(pom%2); pom/=2; } suma+=tab[i]; if (suma>=n) break; } for (int i=S.top(); suma-n && i; i--) if (suma-tab[i]>=n){ ilosc--; cursed.insert(i); suma-=tab[i]; } cout <<ilosc<<endl; while (S.size()){ if (!cursed.count(S.top())) cout <<S.top()<<" "; S.pop(); } cout <<endl; } /* 3 2 3 1 10 6 7 5 4 3 2 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 44 45 | #include <bits/stdc++.h> using namespace std; int n, pom, ilosc=0, tab[125000], suma; stack <int> S; set <int> cursed; int main() {ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (int i=1; i<=125000; i++){ S.push(i); ilosc++; pom=i; while (pom){ tab[i]+=(pom%2); pom/=2; } suma+=tab[i]; if (suma>=n) break; } for (int i=S.top(); suma-n && i; i--) if (suma-tab[i]>=n){ ilosc--; cursed.insert(i); suma-=tab[i]; } cout <<ilosc<<endl; while (S.size()){ if (!cursed.count(S.top())) cout <<S.top()<<" "; S.pop(); } cout <<endl; } /* 3 2 3 1 10 6 7 5 4 3 2 1 */ |