QOJ.ac

QOJ

実行時間制限: 0.5 s メモリ制限: 256 MB 満点: 100 インタラクティブ

#13793. 迷失在环中

統計

在游览希尔万沙宫殿(Palace of Shirvanshahs)时,你迷路了,并发现自己处于一个奇妙的环形陷阱中。该陷阱由 $n$ 个完全相同的房间组成。我们将所有房间从 $0$ 到 $n - 1$ 进行编号。每个房间恰好有一扇敞开的门通往下一个房间,即对于 $i = 0, 1, \dots, n - 2$,房间 $i$ 中的门通往房间 $i + 1$,而房间 $n - 1$ 中的门通往房间 $0$。在你穿过一扇门后,它会在你身后关闭,因此你无法返回。最开始,你位于某个房间 $p$,但由于所有房间都是完全相同的,你并不知道具体是哪一个。你需要到达房间 $0$ 并在那里等待救援,以便逃离陷阱。幸运的是,你收到了一个可以指示到房间 $0$ 距离的设备。它会告诉你,你是否可以通过穿过不超过 $\frac{n}{2}$ 扇门到达房间 $0$。在设备电量耗尽之前,你最多可以使用它 35 次。

实现细节

你需要实现以下函数。评测程序(grader)将在每个测试点中调用它一次。

void escape(int n)
  • n:房间的数量。
  • 在该函数执行完毕后,你应当位于房间 $0$。

上述函数可以调用以下函数:

bool jump(int x)
  • x:在使用设备之前,你想要穿过的门的数量。$x$ 的值必须在 $0$ 到 $n - 1$ 之间(含边界)。
  • 该函数返回 true 如果在穿过 $x$ 扇门后,你可以在穿过不超过 $\frac{n}{2}$ 扇门的情况下到达房间 $0$;否则返回 false。请注意,在您使用设备之前,您的位置已经发生了改变。
  • 你最多可以调用此函数 35 次。

数据范围

  • $2 \le n \le 10^9$
  • $1 \le p < n$
  • 评测程序是非适应性(not adaptive)的。这意味着评测程序在 escape 函数执行之前就已经确定了 $p$ 的值,并且在执行过程中不会改变它。

子任务

  1. (11 分)$n \le 30$
  2. (33 分)对于某个 $k$,$n = 2^k - 1$
  3. (56 分)无附加限制

样例

评测程序进行以下函数调用:

escape(10)

共有 $n = 10$ 个房间。假设你从房间 $p = 5$ 开始。让我们考虑以下对 jump 函数的调用:

  • jump(3):你现在位于房间 8。你需要穿过 2 扇门才能到达房间 0,这小于 $\frac{n}{2} = 5$,因此该函数返回 true
  • jump(2):你现在位于房间 0,你可以留在这里,但并非必须如此。该函数将返回 true,因为你不需要穿过任何门即可到达房间 0。
  • jump(3):你现在位于房间 3。你需要穿过 7 扇门才能到达房间 0,因此该函数将返回 false
  • jump(1):你现在位于房间 4。你需要穿过 6 扇门才能到达房间 0,因此该函数再次返回 false
  • jump(6):你现在位于房间 0。如上所述,该函数将返回 true

在这些调用之后,你最终将停留在房间 0,该测试点将被判定为正确。

样例评测程序

样例评测程序按以下格式读取输入:

  • 第 1 行:$n \ p$

如果你的解决方案成功结束,且最后你位于房间 0,样例评测程序将在标准输出中打印单行 OK,并在标准错误流中打印单行,其中包含对 jump 函数的调用次数。否则,样例评测程序将在标准输出中打印你的解决方案失败的原因。

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.