D. Phoenix and Science(贪心&排序)

题目传送门

算法:贪心
时间复杂度
思路:题目可以转化为构造一个数组: 使最小。
根据贪心思想:将依次放入数组直到不能再放,若此时刚好满足,否则将此时的放入数组再排序即可。最后答案序列即为:

AC代码:

#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm> 
#include<vector>
using namespace std;
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n;
        scanf("%d",&n);
        vector<int>v;
        for(int i=1;i<=n;i*=2)
            v.push_back(i),n-=i;
        if(n>0) v.push_back(n);
        sort(v.begin(),v.end());
        printf("%d\n",v.size()-1);
        for(int i=1;i<v.size();i++)
            printf("%d ",v[i]-v[i-1]);
        puts(""); 
    }
    return 0;
}