#include <bits/stdc++.h> //__builtin_popcount() using namespace std; const int nax=130000; int n, pref[nax], t[nax], akt, licznik; queue <int> q; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; if(n==1) { cout<<"1\n1"; return 0; } if(n==2) { cout<<"2\n2 1"; return 0; } for(int i=1; i<=n; i++) { t[i]=__builtin_popcount(i); pref[i]=pref[i-1]+t[i]; //cout<<i<<" "<<t[i]<<" "<<pref[i]<<endl; if(pref[i]>n) { akt=i; break;} } //cout<<akt<<endl; while(n) { while(pref[akt-1]>=n) { akt--; } q.push(akt); //cout<<akt<<" "; n=n-t[akt]; licznik++; } cout<<licznik<<"\n"; while(q.size()) { cout<<q.front()<<" "; q.pop(); } }
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 50 | #include <bits/stdc++.h> //__builtin_popcount() using namespace std; const int nax=130000; int n, pref[nax], t[nax], akt, licznik; queue <int> q; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; if(n==1) { cout<<"1\n1"; return 0; } if(n==2) { cout<<"2\n2 1"; return 0; } for(int i=1; i<=n; i++) { t[i]=__builtin_popcount(i); pref[i]=pref[i-1]+t[i]; //cout<<i<<" "<<t[i]<<" "<<pref[i]<<endl; if(pref[i]>n) { akt=i; break;} } //cout<<akt<<endl; while(n) { while(pref[akt-1]>=n) { akt--; } q.push(akt); //cout<<akt<<" "; n=n-t[akt]; licznik++; } cout<<licznik<<"\n"; while(q.size()) { cout<<q.front()<<" "; q.pop(); } } |