#include<bits/stdc++.h> typedef long long ll; using namespace std; const int N=1000100; int cn[N]; int pref[N]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n;cin>>n; pref[0]=0; for (int i=0;i<=n;i++) cn[i]=__builtin_popcount(i); for (int i=1;i<=n;i++) pref[i]=pref[i-1]+cn[i]; vector<int>ans; int R=n; while (n>0){ R=lower_bound(pref+1,pref+R+1,n)-pref; ans.push_back(R); n-=cn[R--]; } cout<<ans.size()<<endl; for (int i:ans) cout<<i<<" "; cout<<endl; // for (int j=0;j+1<ans.size();j++){ // if (ans[j]-1!=ans[j+1]) exit(1); // } 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 | #include<bits/stdc++.h> typedef long long ll; using namespace std; const int N=1000100; int cn[N]; int pref[N]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n;cin>>n; pref[0]=0; for (int i=0;i<=n;i++) cn[i]=__builtin_popcount(i); for (int i=1;i<=n;i++) pref[i]=pref[i-1]+cn[i]; vector<int>ans; int R=n; while (n>0){ R=lower_bound(pref+1,pref+R+1,n)-pref; ans.push_back(R); n-=cn[R--]; } cout<<ans.size()<<endl; for (int i:ans) cout<<i<<" "; cout<<endl; // for (int j=0;j+1<ans.size();j++){ // if (ans[j]-1!=ans[j+1]) exit(1); // } return 0; } |