[CF1348D] Phoenix and Science - 贪心
Posted mollnn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CF1348D] Phoenix and Science - 贪心相关的知识,希望对你有一定的参考价值。
Description
有一个质量为 (1) 的细菌。接下来的每一天,会有若干个细菌分裂成两个(0 $ le $ 分裂的细菌的数量 $ le $ 当前的细菌数),两个细菌的质量皆为原来细菌的一半。所有细菌分裂完之后每个细菌的质量增长1。
给出你一个整数 $ n $,构造方案能够在若干天后使得细菌质量的和等于 $ n $
Solution
分裂不会影响总质量,只会影响此后质量增加的速度,若当前数量为 (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 - 贪心的主要内容,如果未能解决你的问题,请参考以下文章
[CF1348D] Phoenix and Science - 贪心
CF1348E Phoenix and Berries(dp)