P1335 [NOI2013] 小 Q 的修炼

题目描述

小 Q 最近发现了一款新游戏,游戏的目标是从一个新手修炼成为武功高强的大侠。面对错综复杂的游戏世界,小 Q 要对他面临的每件事情做出谨慎的选择。例如,是否参加一个陌生人邀请的比武;同意或是拒绝用宝剑交换他人的武功秘籍......而小 Q 做出的每一个选择都有可能影响到他以后的发展:面对一个高手,若主动与之比武,很可能会损失惨重;但若不去比武,也许今后就再也见不到这个高手了。 对着这个游戏,小 Q 玩了很多次仍然玩不出他想要的结局,于是他费尽千辛万苦找到了游戏的剧本。令人惊讶的是,游戏的剧本并不像我们平时见到的剧本,反而很像代码。这个剧本是这样描述的: - 量:有 $2$ 种量,常数和变量。 - 常数:一个整数。 - 变量:初始值为 $0$ 的可变整数,不同变量用不同正整数编号区分。 - 事件:整个剧本由若干个事件构成。所有的事件按照给定的顺序从 $1$ 开始依次编号。事件共有 $3$ 种:普通事件、选择跳转和条件跳转。 - 执行位置:一个整数,表示接下来将会执行的事件编号,如果不存在这个编号的事件则停止,即游戏到了一个结局。最初的时候执行位置为 $1$。 - 普通事件:一个变量增加或减少一个量的值。之后执行位置增加 $1$。 - 选择跳转:两个整数。执行到这里时玩家需要在这两个整数中选择一个,之后执行位置将被修改为这个整数。 - 条件跳转:两个量和两个整数。执行到这里时,若第一个量小于第二个量,则执行位置将被修改为第一个整数,否则将被修改为第二个整数。 小 Q 认为,整个游戏是希望一个叫做「成就值」的变量(编号为 $1$)最大。

输入格式

输出格式

说明/提示

### 评分标准 对于每组数据,我们采用如下方式评分: - 如果你的输出不合法,得 $0$ 分。 - 如果你的输出执行了超过 $10^6$ 行剧本,得 $0$ 分。 - 如果你的输出能让剧本正常结束,得 $1$ 分。 - 如果你的输出能让剧本正常结束,且结束时成就值为正数,得 $2$ 分。 我们设置了 $8$ 个评分参数 $a_3 , a_4 , \ldots , a_{10}$。 如果你的输出能让剧本正常结束,且结束时成就值不小于 $a_s$,得 $s$ 分。 如果以上条目有多项满足,则取满足条件中的最高得分。 ### 如何测试你的输出 我们提供 `checker` 这个工具来测试你的输出文件是否是可接受的。使用这个工具的方法是,首先进入终端,在终端中运行下面的命令进入本题的文件夹: `cd train` 然后运行: `./checker ` 其中 `case_no` 是测试数据的编号。例如 `./checker 3` 将测试 `train3.out` 是否可以接受。 在你调用这个程序后,`checker` 将根据你给出的输出文件给出测试的结果,其中包括: - 非法退出:未知错误。 - `Input/Output file does not exist.`:输入/输出文件不存在。 - `Output invalid.`:输出文件有误,此时可能包含具体错误信息。 - `Correct! Your answer is x.`:输出可接受,最后的成就值为 $x$。 ### 更多功能 `checker` 还可以检查任意输入输出文件的测试结果,方法是在终端中运行: `cd train` `./checker ` 其中 `input_file_name` 和 `output_file_name` 分别是输入输出文件的名称。例如 `./checker train3.in train3.out` 将测试 `train3.out` 是否可以接受。 使用 `-w` 可以输出每步运行的结果。用法是 `./checker -w ` 或者 `./checker -w ` 例如 `./checker -w train3.in train3.out` ### 特别提示 如果选手使用自己生成输入文件进行调试,有可能因规模过大造成 checker 出错。若发生这类情况,请尝试较小规模的数据。