本文共 638 字,大约阅读时间需要 2 分钟。
题意: 每个细菌可以在白天的时候分裂,当一个细菌分裂成两个细菌时,子细菌的质量为母细菌的一半,晚上的时候,每个细菌的质量自增1,第一天会有一个质量为1的细菌。现要得到总质量为n的细菌,问最少几天能得到,并说明这几天内,每天分裂的细菌数
思路:说实话看样例解释的话容易看晕,且容易带偏方向,要你求的是多少天后质量能到达n,所以不用管那天的具体的细胞数,我们只要知道它的每天的增量就可以了。假设当前天有x个,晚上分裂t个,那么增加的质量就为2*t+(x-t)等于x+t,所以增加的质量之和x和t有关。要想使得天数最少,我们是不是尽可能地多分裂,于是最理想地质量增加方式就是1 2 4 8 16.。。。但是假设n为9,那么到了1 2 4地时候就可以停了,后面不能再有8(因为否则就要超过9了),但是这个时候还差2个怎么办呢?很简单因为此时x为7,我们只要让t等于2不就行了(也就是选择2个细菌来分裂)。#includeusing namespace std;const int maxn=1e3+5;vector ans;int T,n;int main(){ scanf("%d",&T); while(T--) { ans.clear(); scanf("%d",&n); int sum=0; for(int i=1;sum+i<=n;i<<=1) sum+=i,ans.push_back(i); if(sum
转载地址:http://ubign.baihongyu.com/