#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(); } } |
English