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; }