内容正文:
2020 年 CCF 非专业级软件能力认证
入门级第二轮
2020 CCF CSP-J2
时间:2020 年 11 月 7 日 08:30 ∼ 12:00
题目名称 优秀的拆分 直播获奖 表达式 方格取数
题目类型 传统型 传统型 传统型 传统型
目录 power live expr number
可执行文件名 power live expr number
输入文件名 power.in live.in expr.in number.in
输出文件名 power.out live.out expr.out number.out
时间限制 1.0 秒 1.0 秒 1.0 秒 1.0 秒
内存限制 256 MB 256 MB 256 MB 256 MB
测试点数目 20 20 20 20
提交源程序文件名
C++ 语言 power.cpp live.cpp expr.cpp number.cpp
C 语言 power.c live.c expr.c number.c
Pascal 语言 power.pas live.pas expr.pas number.pas
编译选项
C++ 语言 -lm
C 语言 -lm
Pascal 语言
注意事项(请选手仔细阅读)
1. 文件名(程序名和输入输出文件名)必须使用英文小写。
2. C/C++ 中函数 main() 的返回值类型必须是 int,程序正常结束时的返回值
必须是 0。
3. 提交的程序代码文件的放置位置请参照各省的具体要求。
4. 因违反以上三点而出现的错误或问题,申诉时一律不予受理。
5. 若无特殊说明,结果的比较方式为全文比较(过滤行末空格及文末回车)。
6. 程序可使用的栈内存空间限制与题目的内存限制一致。
7. 全国统一评测时采用的机器配置为:Intel(R) Core(TM) i7-8700K CPU @
3.70GHz,内存 32GB。上述时限以此配置为准。
8. 只提供 Linux 格式附加样例文件。
9. 评测在当前最新公布的 NOI Linux 下进行,各语言的编译器版本以其为准。
2020年 CCF非专业级软件能力认证入门组第二轮
优秀的拆分(power)
【题目描述】
一般来说,一个正整数可以拆分成若干个正整数的和。例如,1 = 1,10 =
1 + 2 + 3 + 4 等。
对于正整数 𝑛 的一种特定拆分,我们称它为“优秀的”,当且仅当在这种拆
分下,𝑛 被分解为了若干个不同的 2 的正整数次幂。注意,一个数 𝑥 能被表
示成 2 的正整数次幂,当且仅当 𝑥 能通过正整数个 2 相乘在一起得到。
例如,10 = 8 + 2 = 23 + 21 是一个优秀的拆分。但是,7 = 4 + 2 + 1 =
22 + 21 + 20 就不是一个优秀的拆分,因为 1 不是 2 的正整数次幂。
现在,给定正整数 𝑛,你需要判断这个数的所有拆分中,是否存在优秀的
拆分。若存在,请你给出具体的拆分方案。
【输入格式】
输入文件名为 power.in。
输入文件只有一行,一个正整数 𝑛,代表需要判断的数。
【输出格式】
输出文件名为 power.out。
如果这个数的所有拆分中,存在优秀的拆分。那么,你需要从大到小输出
这个拆分中的每一个数,相邻两个数之间用一个空格隔开。可以证明,在规定
了拆分数字的顺序后,该拆分方案是唯一的。
若不存在优秀的拆分,输出“-1”(不包含双引号)。
【样例 1输入】
6
【样例 1输出】
4 2
【样例 1解释】
6 = 4 + 2 = 22 + 21 是一个优秀的拆分。注意,6 = 2 + 2 + 2 不是一个优
秀的拆分,因为拆分成的 3 个数不满足每个数互不相同。
【样例 2输入】
7
2020年 CCF非专业级软件能力认证入门组第二轮
【样例 2输出】
-1
【样例 3】
见选手目录下的 power/power3.in 与 power/power3.ans。
【数据范围与提示】
对于 20% 的数据,𝑛 ≤ 10。
对于另外 20% 的数据,保证 𝑛 为奇数。
对于另外 20% 的数据,保证 𝑛 为 2 的正整数次幂。
对于 80% 的数据,𝑛 ≤ 1024。
对于 100% 的数据,1 ≤ 𝑛 ≤ 1 × 107。
2020年 CCF非专业级软件能力认证入门组第二轮
直播获奖(live)