看到题目第一眼就可以联想到二进制
代码如下
#include<bits/stdc++.h>
using namespace std;
long long ans[10000];
long long tot,m;
int main() {
cin>>m;
for(long long i=1;; i*=2) {
if(tot+i<m) {
tot+=i;
ans[++ans[0]]=i;
} else {
ans[++ans[0]]=m-tot;
//特判
for(int i=2; i<ans[0]; i++)
if(ans[i]==ans[ans[0]]) {
ans[2]--;
ans[ans[0]]++;
break;
}
break;
}
}
sort(ans+1,ans+ans[0]+1);
cout<<ans[0]<<"\n";
for(int i=1; i<=ans[0]; i++)
cout<<ans[i]<<" ";
return 0;
}