#P1416. Shredding Company
Shredding Company
题目描述
你刚刚被任命为碎纸机公司开发一款新型碎纸机。尽管“普通”碎纸机只是将纸张切成小碎片,使内容无法阅读,但这款新型碎纸机需要具备以下特殊的基本特性。
- 碎纸机的输入包括一个目标数字和一张写有数字的纸张。
- 它将纸张切碎(或切割)成多个碎片,每个碎片上有一个或多个数字。
- 每个碎片上的数字之和尽可能接近目标数字,但不能超过它。
例如,假设目标数字是,纸张上的数字是。碎纸机会将纸张切成四部分,其中一部分是,另一部分是,第三部分是,第四部分是。这是因为它们的和()是所有可能组合中最接近目标数字且不超过的组合。例如,组合、、和是无效的,因为它们的和()小于之前的。而组合、和也是无效的,因为它们的和()超过了目标数字。
图1. 当目标数字为时,对写有数字的纸张进行切割
此外,还有三条特殊规则:
-
如果目标数字与纸张上的数字相同,则不切割纸张。
例如,如果目标数字是,纸张上的数字也是,则不切割纸张。 -
如果无法找到任何组合的和小于或等于目标数字,则在显示器上打印“error”。
例如,如果目标数字是,纸张上的数字是,则无法生成任何有效组合,因为最小的可能组合是、、,其和为,大于目标数字,因此打印“error”。 -
如果有多个组合的和最接近目标数字且不超过它,则在显示器上打印“rejected”。
例如,如果目标数字是,纸张上的数字是,则存在两种可能的组合,其和均为:(a) 和;(b) 和;因此打印“rejected”。
为了开发这款碎纸机,你决定先编写一个简单的程序来模拟上述特性和规则。给定两个数字,第一个是目标数字,第二个是待切割的纸张上的数字,你需要计算出碎纸机应如何“切割”第二个数字。
输入
输入包含多个测试用例,每个测试用例占一行,格式如下:
t1 num1
t2 num2
...
tn numn
0 0
每个测试用例包含以下两个正整数,用一个空格分隔:
(1) 第一个整数(即上述的)是目标数字,(2) 第二个整数(即上述的)是纸张上待切割的数字。
两个整数的首位数字均不为,例如是允许的,但不允许。假设两个整数的长度最多为位。一行输入两个表示输入结束。
输出
对于每个测试用例,输出对应以下三种类型之一:
sum part1 part2 ...
rejected
error
在第一种类型中,和的含义如下:
- 每个表示一个碎片上的数字,其顺序与纸张上原始数字的顺序一致。
- 是切割后所有数字的和,即。
每个数字之间用一个空格分隔。
如果无法生成任何有效组合,则输出“error”;如果有多个最优组合,则输出“rejected”。
每行的开头或末尾不允许有多余的空格或其他字符。
输入数据 1
50 12346
376 144139
927438 927438
18 3312
9 3142
25 1299
111 33333
103 862150
6 1104
0 0
输出数据 1
43 1 2 34 6
283 144 139
927438 927438
18 3 3 12
error
21 1 2 9 9
rejected
103 86 2 15 0
rejected
来源
Japan 2002 Kanazawa