QOJ.ac

QOJ

Time Limit: 10 s - 40 s Memory Limit: 1024 MB Total points: 30

#12287. 操作

Statistics

在 Code Jam,我们喜欢玩一个叫“Operation”的游戏。(不,它和外科手术没有任何关系;你为什么会这么想?)这个游戏使用卡片进行,每张卡片上都标有一个基本算术运算(加、减、乘或除)$O_i$ 以及一个整数右操作数 $V_i$。例如,一张卡片可能是 $+ 0$、$- -2$ 或 $/ -4$ ——请注意,操作数可以是负数或零,但除法运算的卡片永远不会以 $0$ 作为操作数。

在游戏的每一轮中,会选择一个起始整数 $S$,并摆出一组 $C$ 张卡片。玩家必须为这些卡片选择一个顺序,且每张卡片必须恰好使用一次。之后,按照顺序将这些运算应用于起始值 $S$,从而得到最终结果。

尽管卡片上的所有操作数都是整数,但运算是在有理数上执行的。例如,假设初始值为 $5$,卡片为 $+ 1$、$- 2$、$* 3$ 和 $/ -2$。如果我们按上述顺序排列,最终结果为 $(5 + 1 - 2) * 3 / (-2) = -6$。请注意,运算是按照卡片给出的顺序执行的,不考虑任何运算符优先级。另一方面,如果我们选择顺序 $- 2$、$/ -2$、$+ 1$、$* 3$,结果为 $((5 - 2) / (-2) + 1) * 3 = -3 / 2$。事实证明,该示例是这组卡片能得到的最大值。

给定一组卡片,你能算出能得到的最大最终值吗?请以不可约分数(分母为正)的形式给出结果。

输入格式

输入的第一行给出测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行包含两个整数 $S$ 和 $C$:游戏的起始值和卡片数量。接下来有 $C$ 行,第 $i$ 行代表一张卡片,包含一个字符 $O_i$(表示运算,为 $+$, $-$, $*$, 或 $/$ 之一)和一个整数 $V_i$(表示操作数)。

输出格式

对于每个测试用例,输出一行 Case #x: y z,其中 $x$ 是测试用例编号(从 $1$ 开始),$y$ 和 $z$ 是整数,使得 $y/z$ 是游戏能达到的最大最终值,$y$ 和 $z$ 除了 $1$ 和 $-1$ 外没有公约数,且 $z$ 严格大于 $0$。

数据范围

$1 \le T \le 100$ $-1,000 \le S \le 1,000$ $O_i$ 为 $+$, $-$, $*$, 或 $/$ 之一,对于所有 $i$。 $-1,000 \le V_i \le 1,000$,对于所有 $i$。 如果 $O_i = /$,则 $V_i \neq 0$,对于所有 $i$。

子任务 1 时间限制:10 秒 $1 \le C \le 15$

子任务 2 时间限制:40 秒 $1 \le C \le 1000$

样例

样例输入 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

样例输出 1

Case #1: -1 1
Case #2: -3 2
Case #3:
1000000000000000000000000 1
Case #4: 1 1
Case #5: 0 1

说明

在样例 1 中,最优策略是在 $- 3$ 卡片之前使用 $* 2$ 卡片,结果为 $-1$。题目要求的唯一有理数表达式为 $-1\ 1$。

样例 2 即为题目描述第三段中提到的例子。

在样例 3 中,无论使用卡片的顺序如何,我们得到的结果都是一样的。注意,答案的分子太大,无法用 64 位整数存储。

在样例 4 中,我们能达到的最大结果是 $1$。其中一种方式是:$/ -1, * 0, - -1$。

在样例 5 中,注意答案唯一有效的表示形式是 $0\ 1$。$0\ 2$ 是无效的,因为它可以约分。$0\ -1$ 是无效的,因为分母必须为正。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.