CF1348D Phoenix and Science
题目描述
Phoenix 决定成为一名科学家!他正在研究细菌的生长。
最初,在第 $1$ 天,有一个质量为 $1$ 的细菌。
每天,会有若干个细菌分裂(可能为零个,也可能全部分裂)。当一个质量为 $m$ 的细菌分裂时,它会变成两个质量为 $\frac{m}{2}$ 的细菌。例如,一个质量为 $3$ 的细菌可以分裂成两个质量为 $1.5$ 的细菌。
此外,每天晚上,每个细菌的质量都会增加 $1$。
Phoenix 想知道,是否有可能使所有细菌的总质量恰好等于 $n$。如果可能,他还想知道用最少的夜晚获得该质量的方法。请帮助他成为最优秀的科学家!
输入格式
输入包含多组测试用例。第一行包含一个整数 $t$($1 \le t \le 1000$)——表示测试用例的数量。
每个测试用例的第一行包含一个整数 $n$($2 \le n \le 10^9$)——Phoenix 感兴趣的细菌总质量。
输出格式
对于每个测试用例,如果无法使细菌的总质量恰好等于 $n$,输出 $-1$。否则,输出两行。
第一行输出一个整数 $d$——所需的最少夜晚数。
第二行输出 $d$ 个整数,第 $i$ 个整数表示第 $i$ 天需要分裂的细菌数量。
如果有多种方案,输出任意一种即可。
说明/提示
在第一个测试用例中,以下过程可以使细菌的总质量为 $9$:
- 第 $1$ 天:质量为 $1$ 的细菌分裂。现在有两个质量为 $0.5$ 的细菌。
- 第 $1$ 夜:所有细菌的质量增加 $1$。现在有两个质量为 $1.5$ 的细菌。
- 第 $2$ 天:没有细菌分裂。
- 第 $2$ 夜:现在有两个质量为 $2.5$ 的细菌。
- 第 $3$ 天:两个细菌都分裂。现在有四个质量为 $1.25$ 的细菌。
- 第 $3$ 夜:现在有四个质量为 $2.25$ 的细菌。
总质量为 $2.25+2.25+2.25+2.25=9$。可以证明,$3$ 是所需的最少夜晚数。也存在其他在 $3$ 个夜晚内获得总质量 $9$ 的方法。
在第二个测试用例中,以下过程可以使细菌的总质量为 $11$:
- 第 $1$ 天:质量为 $1$ 的细菌分裂。现在有两个质量为 $0.5$ 的细菌。
- 第 $1$ 夜:现在有两个质量为 $1.5$ 的细菌。
- 第 $2$ 天:有一个细菌分裂。现在有三个细菌,质量分别为 $0.75$、$0.75$ 和 $1.5$。
- 第 $2$ 夜:现在有三个细菌,质量分别为 $1.75$、$1.75$ 和 $2.5$。
- 第 $3$ 天:质量为 $1.75$ 和 $2.5$ 的细菌分裂。现在有五个细菌,质量分别为 $0.875$、$0.875$、$1.25$、$1.25$ 和 $1.75$。
- 第 $3$ 夜:现在有五个细菌,质量分别为 $1.875$、$1.875$、$2.25$、$2.25$ 和 $2.75$。
总质量为 $1.875+1.875+2.25+2.25+2.75=11$。可以证明,$3$ 是所需的最少夜晚数。也存在其他在 $3$ 个夜晚内获得总质量 $11$ 的方法。
在第三个测试用例中,第 $1$ 天细菌不分裂,经过第 $1$ 夜后,质量增长到 $2$。
由 ChatGPT 4.1 翻译