QOJ.ac

QOJ

時間限制: 1.0 s 記憶體限制: 512 MB 總分: 100 互動 可 Hack ✓

#16720. 猫鼠游戏

统计

这是一道交互题。

Carl Hanratty 是一名不苟言笑的 FBI 探员,通常在金融领域追捕罪犯,但他闲暇时也喜欢在公园里玩《宝可梦 GO》(Pokemon GO)。

他仍然在玩一个带有可用宝可梦雷达的老版本游戏。这个雷达会显示一个、两个或三个爪子,告诉他宝可梦距离当前玩家的位置有多远。三个爪子意味着宝可梦距离玩家不超过 $3 \cdot r$ 米,两个爪子意味着不超过 $2 \cdot r$ 米,一个爪子意味着不超过 $r$ 米。已知 $r$ 的值是一个介于 $1$ 到 $100$ 之间(含端点)的实数,但 Carl 并不知道 $r$ 的具体数值。

由于 Carl 是一名非常优秀的 FBI 探员,并且总是力求完美,他希望利用 FBI 的一个秘密分析工作组来提高自己捕捉宝可梦的水平。你就是该分析团队的一员。你将从 Carl 那里接收现场信息,然后指引他的行动,以便找到并捕获宝可梦。

你可以假设所有的移动都发生在一个二维平面上。Carl 位于坐标 $(0, 0)$ 处,并且他刚刚在雷达上第一次看到了宝可梦(显示为三个爪子)。这意味着 Carl 最初距离宝可梦恰好为 $3 \cdot r$ 米。为了与 Carl 沟通,你最多可以进行 $5$ 次以下过程的迭代:

  1. 你向 Carl 发送一个以度为单位的角度:他应该移动的方向。该角度可以是 $0$ 到 $360$ 之间(含端点)的任意实数。
  2. Carl 沿着这个方向直行,直到雷达指示发生变化。这会在以下情况发生:他抓住了宝可梦(此时游戏停止)、到达了距离宝可梦更近的雷达区域(雷达上的爪子数减少 $1$)、或者到达了距离宝可梦更远的雷达区域(或宝可梦完全从雷达上消失)。在最后一种情况下,Carl 会立即向后退一步,回到之前的“三爪”区域,因为他不想往一个明显错误的方向移动。
  3. Carl 告诉你他移动的精确距离以及当前雷达区域的爪子数 $p$ ($1 \le p \le 3$)。这意味着当前到宝可梦的距离为 $p \cdot r$。请注意,即使 Carl 返回的距离为 $0$,这次沟通也算作一次迭代,这代表在给定方向上移动任何正距离都会立即导致雷达指示发生变化。

在与 Carl 的第 $5$ 次沟通中,他的行为会有些许不同。因为他知道自己无法再从你这里获得任何指令,所以他会忽略所有的雷达区域,并沿着你给他的方向直行,直到他找到宝可梦,或者宝可梦完全从雷达上消失。

保证宝可梦的位置是固定的,并且在每局游戏中不会改变。同时也保证未知的实数 $r$ 介于 $1$ 到 $100$ 之间(含端点)。

交互格式

你最多有 $5$ 次沟通尝试。要开始下一次尝试,你的程序必须通过在单独的一行中输出一个实数 $a$ ($0 \le a \le 360$) 来为 Carl 提供一个方向。之后,你的程序将在标准输入的下一行中获取结果。

如果在任何时刻,Carl 距离宝可梦的实际位置在 $r/10$ 以内,他会立即抓住它,并向你返回最后一个单词 Gotcha!(不带引号)。

否则,如果你用尽了与 Carl 的沟通次数,且他在最后一次移动中未能找到宝可梦,他会向你发送最后一行 The pokemon ran away!(不带引号)。

在所有其他情况下,Carl 会向你发送他移动的距离 $d$(小数点后至少保留十位数字)以及新雷达区域的爪子数 $p$ ($1 \le p \le 3$)。这两个数字之间用一个空格分隔。

当宝可梦被抓住或逃跑时,你与 Carl 的沟通必须停止。

样例

输入样例 1

0.0000000000 3
3.0000000000 2
0.0000000000 2
0.0000000000 2
Gotcha!

输出样例 1

90
0
270
90
0

输入样例 2

14.1421356237 3
3.3333333333 2
9.4280904158 2
9.4280904158 2
Gotcha!

输出样例 2

315
90
135
45
270

说明

在第一个样例输入中,宝可梦位于点 $(9, 0)$。

在第二个样例输入中,宝可梦位于点 $(10, 0)$。

从你的程序到交互程序的管道以及返回的管道大小是有限的。你的程序必须从标准输入中读取以避免死锁。死锁情况将被报告为“Time Limit Exceeded”(超出时间限制)。

要刷新标准输出流,请使用以下语句:

  • 在 C 中,使用 fflush(stdout);
  • 在 C++ 中,使用 cout.flush();
  • 在 Java 中,使用 System.out.flush();
  • 在 Python 中,使用 sys.stdout.flush()

如果你的程序在标准输入上收到 EOF(文件结束)信号,它必须立即退出,退出码为 0。不遵守此要求可能会导致“Time Limit Exceeded”错误。

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.