QOJ.ac

QOJ

حد الوقت: 30 s حد الذاكرة: 1024 MB مجموع النقاط: 38

#5877. 程序中的程序

الإحصائيات

你有一个位于东西向无限长高速公路上的机器人,它需要运送一个蛋糕。高速公路上的每一英里处都有一个路灯。你需要编写一个程序,让机器人向东移动恰好 $N$ 个路灯,并在那里放下蛋糕。路线不必是直线的,只要机器人最终在正确的位置放下蛋糕即可。

不幸的是,机器人的内存非常有限,且不具备高级逻辑能力。为了控制机器人,你必须在开始时给它一个非常简单的程序,引导它在正确的位置放下蛋糕。该程序必须由一条或多条语句组成,每条语句告诉机器人在特定条件下该做什么。这些语句必须采用以下格式:

<S> <M> -> <action>

这意味着如果满足以下所有条件:

  1. 机器人处于状态 S
  2. 机器人位于标记为 M 的路灯处。

那么它将执行以下动作之一:

  1. 用一个新数字标记当前路灯,改变状态并移动。为此,<action> 必须格式化为 "<D> <NS> <NM>",其中 D 是移动方向('W' 表示向西,'E' 表示向东),NS 是机器人的新状态,NM 是当前路灯的新标记。
  2. 在当前位置放下蛋糕并自毁。为此,<action> 必须格式化为 "R"

如果你输出两条或多条具有相同 SM 值的语句,机器人将发生故障并销毁蛋糕。

如果机器人在任何时候处于状态 X 且位于标记为 Y 的路灯处,而没有 S=XM=Y 的语句,机器人就会感到困惑并吃掉蛋糕。

所有状态和标记必须是绝对值不超过一百万 ($10^6$) 的整数。假设机器人初始处于状态 0,且所有路灯初始标记均为 0。

给定 $N$,编写一个程序,使机器人能在正确的位置放下蛋糕。你的程序最多只能使用 30 条语句,并且必须在 $X$ 步内终止。

输入格式

输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例包含一行,其中包含一个整数 $N$,表示机器人必须放下蛋糕的路灯位置。

输出格式

对于每个测试用例,首先输出 "Case #x: y",其中 $x$ 是测试用例编号(从 1 开始),$y$ 是你使用的语句数量。接下来输出 $y$ 行,每行代表一条按照上述格式编写的机器人语句。

警告:评测机的响应时间可能比平时长 5 秒,因为你的输出会作为验证过程的一部分运行。

数据范围

$1 \le T \le 15$。

内存限制:1GB。

小数据集(测试集 1 - 可见;15 分)

$0 \le N \le 500$。

$X = 250,000$ ($2.5 \times 10^5$)。

时间限制:30 秒。

大数据集(测试集 2 - 隐藏;23 分)

$0 \le N \le 5000$。

$X = 150,000$ ($1.5 \times 10^5$)。

时间限制:60 秒。

样例

样例输入 1

3
0
4
0

样例输出 1

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

说明

在第一个样例中,机器人初始处于状态 0,路灯上的标记为 0。因此它执行唯一的语句,即放下蛋糕。

在第二个样例中,机器人有五个状态:0, 1, 2, 3 和 -1。机器人执行以下动作:

  • 将当前路灯标记为 1,向东移动,并进入状态 1。
  • 将当前路灯标记为 1,向东移动,并进入状态 2。
  • 将当前路灯标记为 1,向东移动,并进入状态 3。
  • 将当前路灯标记为 1,向东移动,并进入状态 -1。
  • 放下蛋糕。

在第三个样例中,机器人有两个状态,并执行以下动作:

  • 将当前路灯标记为 1,向东移动,并进入状态 1。
  • 将当前路灯标记为 1,向西移动,并进入状态 0。
  • 放下蛋糕。

注意,机器人在两次处于状态 0 时执行了不同的动作,因为它每次看到的标记不同。

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.