#CSPJ2020T1. 2020 T1 优秀的拆分

2020 T1 优秀的拆分

2020 T1 优秀的拆分

主知识点:枚举与数学。交叉标签:位运算、枚举、数学。
暴力标注:不属于重点 DP 退路题。
OJ 使用标准输入与标准输出。原比赛文件名为 power.in / power.out;下方如保留原文件约定,以本句的 OJ 约定为准。
时限 1 秒;内存 256 MiB;测试点 20;总分 100。
数据来源:公开存档数据;未逐文件对照官网下载包。

题目描述

判断正整数 nn 能否写成若干个互不相同的 22 的正整数次幂之和。若可以,按从大到小输出这些数;否则输出 -1。指数必须为正,因此数 1 不允许作为一项。

输入格式

输入只有一行,一个整数 nn,代表需要判断的数。

输出格式

如果这个数的所有拆分中,存在优秀的拆分。那么,你需要从大到小输出这个拆分中的每一个数,相邻两个数之间用一个空格隔开。可以证明,在规定了拆分数字的顺序后,该拆分方案是唯一的。

若不存在优秀的拆分,输出 -1。

样例

样例 1

输入:

6

输出:

4 2

样例 2

输入:

7

输出:

-1

样例 3

输入:

126

输出:

64 32 16 8 4 2

数据范围与特殊性质

  • 对于 20%20\% 的数据,n≤10n \le 10。

  • 对于另外 20%20\% 的数据,保证 nn 为奇数。

  • 对于另外 20%20\% 的数据,保证 nn 为 22 的正整数次幂。

  • 对于 80%80\% 的数据,n≤1024n \le 1024。

  • 对于 100%100\% 的数据,1≤n≤1071 \le n \le {10}^7。

附加样例

本题的公开样例整理在对应的“样例”ZIP 中。样例不计入评测测试点;题面中的样例也已保留。

来源与整理说明

题目原作者/发布者:中国计算机学会 CCF / NOI。题意经过改写,保留公式、输入输出、样例及约束;知识点和暴力标注为本次整理补充。