标签:sign size out sync des sci push long 原来
有一个质量为 \(1\) 的细菌。接下来的每一天,会有若干个细菌分裂成两个(0 $ \le $ 分裂的细菌的数量 $ \le $ 当前的细菌数),两个细菌的质量皆为原来细菌的一半。所有细菌分裂完之后每个细菌的质量增长1。
给出你一个整数 $ n $,构造方案能够在若干天后使得细菌质量的和等于 $ n $
分裂不会影响总质量,只会影响此后质量增加的速度,若当前数量为 \(x\),则 \(x \le \Delta m \le 2x\)
于是贪心地取,当不够的时候就将不够的一次取走即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
int n;
signed main() {
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--) {
cin>>n;
vector <int> v;
int x=1;
while(n>0) {
v.push_back(min(n,x));
n-=x;
x*=2;
}
sort(v.begin(),v.end());
cout<<v.size()-1<<endl;
for(int i=1;i<v.size();i++) cout<<v[i]-v[i-1]<<" ";
cout<<endl;
}
}
[CF1348D] Phoenix and Science - 贪心
标签:sign size out sync des sci push long 原来
原文地址:https://www.cnblogs.com/mollnn/p/12847807.html