#include <bits/stdc++.h> using namespace std; int main(){ int n=(cin>>n,n), sum=0, i=1, last[33]; for(int i=0;i<33;i++) last[i]=0; while(sum<n){ int r = __builtin_popcount(i); sum+=r; last[r]=i++; // cout<<"["<<sum<<"]"; } // cout<<"{"<<sum-n<<endl; cout << (n==sum ? i-1 : i-2) <<'\n'; for(int j=i-1;j>0;j--) if(j!=last[sum-n]) cout<<j<<" "; cout<<endl; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <bits/stdc++.h> using namespace std; int main(){ int n=(cin>>n,n), sum=0, i=1, last[33]; for(int i=0;i<33;i++) last[i]=0; while(sum<n){ int r = __builtin_popcount(i); sum+=r; last[r]=i++; // cout<<"["<<sum<<"]"; } // cout<<"{"<<sum-n<<endl; cout << (n==sum ? i-1 : i-2) <<'\n'; for(int j=i-1;j>0;j--) if(j!=last[sum-n]) cout<<j<<" "; cout<<endl; } |