我在loj上先做的这一题,AC了,第二天来洛谷粘贴时发现WA了
样例过了
#include<iostream>
#include<cstdio>
#include<cstring>
#define int long long
using namespace std;
int n,num,a[2000001],ans,b[2000001];
void dfs(int i)
{
// cout<<i<<" "<<a[i]<<endl;
if(a[i]>num) return ;
if(i>=ans) return ;
if(a[i]==num)
{
ans=i;
// memcpy(b,a,sizeof(a));
for(int i=1;i<=ans;i++) b[i]=a[i];
return ;
}
for(int j=1;j<=i;j++)
{
if(a[j]+a[i]>num) break;
// cout<<a[j]<<" "<<a[k]<<" "<<num<<endl;
a[i+1]=a[j]+a[i];
dfs(i+1);
}
}
signed main()
{
while(1)
{
ans=1e16;
scanf("%lld",&n);
if(n==0) break;
num=n;
while(num%2==0)
{
num/=2;
}
a[1]=1;
dfs(1);
for(int i=1;i<=ans;i++)
{
printf("%lld ",b[i]);
}
while(b[ans]!=n)
{
b[ans]*=2;
printf("%lld ",b[ans]);
}
printf("\n");
}
return 0;
}