#P13384. [GCJ 2011 Finals] Program within a Program
[GCJ 2011 Finals] Program within a Program
Description
你有一个机器人,位于一条无限延伸的东西向公路上,并且它需要递送一个蛋糕。公路上每隔一英里(无论东西方向)就有一根路灯柱。你需要编程让机器人恰好向东移动 根路灯柱,并在那里释放蛋糕。路线不必直线,只要最终机器人能在正确的位置释放蛋糕即可。
不幸的是,这个机器人只有极少的内存,并且无法进行复杂的逻辑运算。你只能在开始时给它一个非常简单的程序,这个程序必须能让它在正确的位置释放蛋糕。该程序由一条或多条语句组成,每条语句都指示机器人在特定条件下该做什么。语句格式如下:
<S> <M> -> <action>
这表示当且仅当以下所有条件满足时:
- 机器人处于状态 。
- 机器人当前所在的路灯柱标记为 。
它将执行以下动作之一:
- 给当前路灯柱打上新标记,改变状态并移动。此时
<action>格式为 "<D> <NS> <NM>",其中D表示移动方向('W' 表示向西,'E' 表示向东),NS表示机器人的新状态,NM表示当前路灯柱的新标记。 - 在当前位置释放蛋糕并自毁。此时
<action>只需写release。
如果你输出了两条或更多具有相同 和 的语句,机器人会出错并摧毁蛋糕。
如果机器人在某时刻处于状态 ,且站在标记为 的路灯柱上,但没有语句满足 且 ,那么机器人会困惑并吃掉蛋糕。
所有状态和标记都必须是绝对值不超过一百万()的整数。假设机器人初始状态为 ,所有路灯柱初始标记为 。
给定 ,请编写一个程序,使机器人能在正确的位置释放蛋糕。你的程序最多只能使用 条语句,并且必须在 步内终止。
Input Format
输入的第一行是测试用例数 。接下来有 个测试用例,每个测试用例占一行,包含一个整数 ,表示机器人需要释放蛋糕的路灯柱编号。
Output Format
对于每个测试用例,首先输出一行 "Case #: ",其中 是测试用例编号(从 开始), 是你使用的语句条数。接下来输出 行,每行是一条机器人程序语句,格式如上所述。
警告:评测机的响应可能比平时慢最多 5 秒,因为你的输出会作为验证的一部分运行。
3
0
4
0
Case #1: 1
0 0 -> R
Case #2: 5
0 0 -> E 1 1
1 0 -> E 2 1
2 0 -> E 3 1
3 0 -> E -1 1
-1 0 -> R
Case #3: 3
0 0 -> E 1 1
0 1 -> R
1 0 -> W 0 1
Hint
样例解释
在第一个样例中,机器人初始状态为 ,路灯柱标记为 。它执行唯一的语句,即释放蛋糕。
在第二个样例中,机器人有五种状态:、、、 和 。机器人按如下方式行动:
- 将当前路灯柱标记为 ,向东移动,进入状态 。
- 将当前路灯柱标记为 ,向东移动,进入状态 。
- 将当前路灯柱标记为 ,向东移动,进入状态 。
- 将当前路灯柱标记为 ,向东移动,进入状态 。
- 释放蛋糕。
在第三个样例中,机器人有两种状态,执行如下操作:
- 将当前路灯柱标记为 ,向东移动,进入状态 。
- 将当前路灯柱标记为 ,向西移动,进入状态 。
- 释放蛋糕。
注意,机器人两次处于状态 时采取了不同的动作,因为它看到的标记不同。
数据范围
- 。
小数据集(15 分,测试点 1 - 可见)
- 。
- 。
- 时间限制:30 秒。
大数据集(23 分,测试点 2 - 隐藏)
- 。
- 。
- 时间限制:60 秒。
由 ChatGPT 4.1 翻译
京公网安备 11011102002149号