先部分分,再进阶
先认清任务,再讨论算法
2024 CSP-J 第二轮 T3|小木棍
一、完整题目
题目名称:P11229 [CSP-J 2024] 小木棍(sticks)
源程序文件:
输入文件:
时间限制:1 秒 内存限制:512 MiB
测试点:10 个等分点,每点 10 分
源程序文件:
sticks.cpp输入文件:
sticks.in 输出文件:sticks.out时间限制:1 秒 内存限制:512 MiB
测试点:10 个等分点,每点 10 分
题目描述
小 S 喜欢收集小木棍。在收集了 n 根长度相等的小木棍之后,他闲来无事,便用它们拼起了数字。用小木棍拼每种数字时,需要的木棍数如下:
| 数字 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| 木棍数 | 6 | 2 | 5 | 5 | 4 | 5 | 6 | 3 | 7 | 6 |
现在小 S 希望拼出一个正整数,满足如下条件:
- 拼出这个数恰好使用
n根小木棍; - 拼出的数没有前导
0; - 在满足以上两个条件的前提下,这个数尽可能小。
小 S 想知道这个数是多少,可 n 很大,把木棍整理清楚就把小 S 折腾坏了,所以你需要帮他解决这个问题。如果不存在正整数满足以上条件,需要输出 -1 进行报告。
输入格式
本题有多组测试数据。
从文件 sticks.in 中读入数据。输入的第一行包含一个正整数 T,表示数据组数。接下来包含 T 组数据,每组一行一个整数 n,表示木棍数。
输出格式
输出到文件 sticks.out 中。
对于每组数据输出一行:如果存在满足题意的正整数,输出这个数;否则输出 -1。
样例 1
5
1
2
3
6
18
-1
1
7
6
208
样例解释
n=1时,任何数字都至少需要 2 根木棍,所以输出-1。n=6时,0不是正整数;9、41、111虽然也都使用 6 根木棍,但它们都比6大,因此答案是6。208使用5+6+7=18根木棍。可以证明,任何小于208的正整数所需木棍数都不是 18;006虽然也使用 18 根,但有前导零,不能作为答案。
数据范围与测试点
对于所有测试数据,保证:1≤T≤50,1≤n≤10^5。
| 测试点 | n≤ |
特殊性质 |
|---|---|---|
| 1 | 20 | 无 |
| 2 | 50 | 无 |
| 3 | 10^3 |
A |
| 4、5 | 10^5 |
A |
| 6 | 10^3 |
B |
| 7、8 | 10^5 |
B |
| 9 | 10^3 |
无 |
| 10 | 10^5 |
无 |
- 特殊性质 A:保证
n是 7 的倍数且n≥100。 - 特殊性质 B:保证存在整数
k,使n=7k+1,且n≥100。
按测试点取并集,不把重叠分数相加
勾选已掌握的路线,观察它们共同覆盖哪些测试点。这里计算的是该卷条件下的理论覆盖分,不代表程序已经通过正式评测,也不对应任何一等奖分数线。
已掌握的解法
去重后覆盖0 / 100
实际提交时,须将已掌握的分支整合到同一份程序。勾选路线不会自动拼接代码。
测试点覆盖图
已覆盖未覆盖
查看原题评分依据
逐条看懂:性质、推导与完整代码
选择一条路线,查看它为什么成立,再进入同一算法的可视化与代码追踪。
选择得分路线
算法过程执行语句与图示同步
当前变量金色表示与上一步相比发生变化
已输出
尚未输出
0 / 0
键盘 ← → 单步,空格播放 / 暂停
执行记录(最近 8 步)
用边界检查:我真的读懂了吗?
先手算,再展开解释。带入演示时会核对当前路线的适用条件。