#P13180. [GCJ 2017 Finals] Operation
[GCJ 2017 Finals] Operation
Description
在 Code Jam,我们非常喜欢玩一个叫做 Operation 的游戏。(不,这和外科手术没有任何关系;你为什么会这么想呢?)这个游戏是用卡牌来进行的,每张卡牌上都标有一个基本的算术运算(加法、减法、乘法或除法),以及该运算的右操作数 ,它是一个整数。例如,一张卡牌可能写着 ,或者 ,又或者 —— 注意,操作数可以是负数,也可以是零,但带有除法操作的卡牌,其操作数绝不会是 。
每一轮游戏会选定一个初始整数值 ,并摆出一组 张卡牌。玩家需要自行决定这些卡牌的出牌顺序,每张卡牌都必须且只能使用一次。之后,这些操作会按照卡牌顺序依次作用在起始值 上,最终得到一个结果。
虽然卡牌上的操作数都是整数,但实际运算是在有理数范围内执行的。例如,假设初始值为 ,卡牌分别为 、、 和 。如果按照上述顺序出牌,最终结果是 。注意,所有操作都严格按照卡牌顺序依次执行,不考虑运算符优先级。另一方面,如果你选择的顺序是 、、、,那么结果就是 。这个例子中,这样的顺序实际上可以获得这一组卡牌能得到的最大值。
给定一组卡牌,你能算出通过合理排序后,最终可能得到的最大结果吗?请将答案以最简分数形式输出,分母需为正数。
Input Format
输入的第一行给出测试用例的数量 。接下来有 组测试用例。每组测试用例的第一行为两个整数 和 ,分别表示游戏的起始值和卡牌数量。接下来的 行,每行描述一张卡牌,包括一个字符 (表示操作类型,可能为 、、 或 )和一个整数 (表示操作数)。
Output Format
对于每组测试用例,输出一行,内容为 Case #x: y z,其中 表示测试用例编号(从 1 开始), 和 是整数,满足 是该组卡牌能获得的最大最终值,且 和 互质(除了 和 以外没有公约数),并且 必须严格大于 。
5
1 2
- 3
* 2
5 4
+ 1
- 2
* 3
/ -2
1000 7
* -1000
* -1000
* 1000
* 1000
* 1000
* 1000
* 1000
-1 3
- -1
* 0
/ -1
0 1
+ 0
Case #1: -1 1
Case #2: -3 2
Case #3: 1000000000000000000000000 1
Case #4: 1 1
Case #5: 0 1
Hint
样例解释
在样例第 1 组中,最优策略是先打出 卡牌,再打 卡牌,最终结果为 。按题目要求,最简分数表达为 。
样例第 2 组对应题面第三段的例子。
样例第 3 组,无论卡牌顺序如何,答案都相同。注意,答案的分子大到无法用 64 位整数表示。
样例第 4 组,最大结果为 。一种可行顺序为:、、。
样例第 5 组,唯一合法的答案为 。 不合法,因为可以约分; 也不合法,因为分母必须为正数。
限制条件
- 。
- 。
- 对所有 , 为 、、 或 。
- 对所有 ,。
- 若 ,则 。
小数据集(10 分,测试集 1 - 可见)
- 时间限制:
6015 秒。 - 。
大数据集(20 分,测试集 2 - 隐藏)
- 时间限制:
12030 秒。 - 。
翻译由 GPT4.1 完成。
京公网安备 11011102002149号