QOJ.ac

QOJ

حد الوقت: 3 s حد الذاكرة: 256 MB مجموع النقاط: 10 تفاعلية

#6031. 冷热游戏 [B]

الإحصائيات

小 Krotka 和她的哥哥 Entek 是一个 $d$ 维世界中的居民。今天他们决定玩捉迷藏——Entek 先找。由于在高维世界中寻找目标并非易事,为了方便起见,他们决定通过对讲机进行交流。此外,他们每个人都随身携带了一个 GPS 接收器。

Krotka 躲在超立方体森林中的某个格点(即所有坐标均为整数的点)上,并且在游戏结束前不会移动。正如其名,森林是一个边长为 $r$ 的超立方体——其中包含所有坐标在区间 $[0, r]$ 内的点。Entek 在寻找妹妹的过程中在森林中移动,并不时地向她报告自己从 GPS 读取到的位置。我们假设 Entek 在报告位置时总是位于格点上。

在报告位置后,Entek 会收到 Krotka 发来的“热”或“冷”的消息——Krotka 会告诉他,与上一次联系的位置相比,他是否更靠近她的位置。

对于给定的 $d$ 维点 $p, x, y$,Krotka 认为点 $x$ 比点 $y$ 更靠近点 $p$,当且仅当: $$\max_{i=1,2,...,d} |x_i - p_i| < \max_{i=1,2,...,d} |y_i - p_i|$$

Entek 的对讲机电池容量有限,最多允许他进行 $k$ 次连接。请帮他找到妹妹,以免失去联系。

交互

Krotka 躲在一个所有坐标均为整数且属于区间 $[0, r]$ 的 $d$ 维点上。在游戏过程中,Krotka 会如实回答,且不会移动。

你的程序应使用提供的库来模拟 Krotka 的回答。若要在 C 或 C++ 编写的解决方案中使用该库,请在程序中包含:

#include "cielib.h"

对于 Java 解决方案,库将被自动包含,无需在源文件中添加额外行。

与库的交互通过以下函数进行:

  • int podajD() – 返回世界维度,即上述的 $d$。
  • int podajK() – 返回可能的 czyCieplo 询问次数,即上述的 $k$。
  • int podajR() – 返回超立方体森林的边长,即上述的 $r$。
  • int czyCieplo(int pozycja[])pozycja 必须是一个包含 $d$ 个整数的数组,且每个整数都在区间 $[0, r]$ 内,表示 Entek 当前的位置。该函数总是返回 0 或 1。在程序运行期间,最多可以调用该函数 $k$ 次。第一次调用时,函数返回 0。在随后的每次调用中,当且仅当 Entek 当前位置比上一次调用时的位置更靠近 Krotka 的位置时,函数返回 1。
  • void znalazlem(int pozycja[])pozycja 必须是一个包含 $d$ 个整数的数组,且每个整数都在区间 $[0, r]$ 内,表示找到的 Krotka 的位置。该函数必须且仅能调用一次,调用后程序将结束。

对于 C 和 C++,这些是全局函数;对于 Java,这些是 cielib 类的静态方法(即调用方式为 cielib.podajD() 等)。

你的程序不得打开任何文件,也不得使用标准输入输出。解决方案将通过以下命令与库一起编译:

  • C: gcc -std=c11 -static -O2 -s cielib.c cie.c -lm
  • C++: g++ -std=c++11 -static -O2 -s cielib.c cie.cpp -lm
  • Java: javac cie.java jar cf cie.jar *.class

在“文件”部分,你可以找到示例库文件和说明其使用方法的错误解决方案。为了使上述编译命令生效,库文件必须位于当前目录中。

数据范围

在所有测试中,满足 $2 \le r \le 10^9$,$1 \le d \le 500$ 以及 $k \ge 100d$。

子任务

如果你的程序在最多 $k$ 次调用 czyCieplo 函数后,调用了 znalazlem 并给出了正确的 Krotka 位置,则该测试点得满分。如果程序错误地使用库(调用函数时参数不符合“交互”部分的规定,或使用了标准输入输出),则该测试点得 0 分。

样例

函数调用 返回值
podajD() 2
podajK() 200
podajR() 2
czyCieplo({0, 0}) 0
czyCieplo({1, 1}) 1
czyCieplo({2, 2}) 1
znalazlem({2, 2}) 程序成功结束

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.