zhuyebin 2017-09-13 22:51:26
点我顶贴
收藏
删除
#include<cstdio>
int a[110];
void dfs(int x,int y)
{
int l=x,r=y,m=a[(l+r)/2];
while(x<=y)
{
while(a[x]<m)x++;
while(a[y]>m)y--;
if(x<=y)
{
int t=a[x];a[x]=a[y];a[y]=t;
x++;y--;
}
}
if(x<r)dfs(x,r);
if(y>l)dfs(l,y);
}
int main()
{
int n;scanf("%d",&n);
int l=1,c=0,t=n;
while(t)
{
if(t-l>0){a[++c]=l;t-=l;l*=2;}
else if(t!=0)
{
if(t==1){a[c]++;t=0;}
else if(t%2==1){a[++c]=t;t=0;}
else if(t>a[c]){a[++c]=t;t=0;}
else {a[c]++;a[++c]=t-1;t=0;}
}
}
dfs(1,c);
printf("%d\n",c);
for(int i=1;i<=c;i++)
{
printf("%d ",a[i]);
}
}