QOJ.ac

QOJ

Limite de temps : 1 s Limite de mémoire : 256 MB Points totaux : 100 Interactif

#12644. 更热更冷

Statistiques

Jack 和 Jill 在玩一个名为“更热,更冷”(Hotter, Colder)的游戏。Jill 有一个 $1$ 到 $N$ 之间的数字,Jack 需要通过反复猜测来猜出这个数字。

Jack 的每次猜测都是一个 $1$ 到 $N$ 之间的数字。对于每次猜测,Jill 会回答“更热”(hotter)、“更冷”(colder)或“相同”(same)。对于 Jack 的第一次猜测,Jill 总是回答“相同”。对于后续的猜测,Jill 的回答规则如下: 如果本次猜测比上一次猜测更接近 Jill 的数字,回答“更热”。 如果本次猜测比上一次猜测更远离 Jill 的数字,回答“更冷”。 * 如果本次猜测与上一次猜测相比,距离 Jill 的数字既没有更近也没有更远,回答“相同”。

你需要实现一个过程 HC(N) 来扮演 Jack 的角色。该实现可以反复调用 Guess(G),其中 $G$ 是 $1$ 到 $N$ 之间的数字。Guess(G) 将返回 $1$ 表示“更热”,返回 $-1$ 表示“更冷”,返回 $0$ 表示“相同”。HC(N) 必须返回 Jill 的数字。

样例

假设 $N=5$,且 Jill 选择的数字是 $2$。当过程 HC 进行以下一系列 Guess 调用时,第二列将返回相应的结果。

调用 返回值 说明
Guess(5) $0$ 相同(第一次调用)
Guess(3) $1$ 更热
Guess(4) $-1$ 更冷
Guess(1) $1$ 更热
Guess(3) $0$ 相同

此时 Jack 知道了答案,HC 应该返回 $2$。Jack 总共用了 $5$ 次猜测确定了 Jill 的数字。你可以做得更好。

子任务

子任务 1 [25 分]

HC(N) 调用 Guess(G) 的次数最多为 $500$ 次。对于 $N$ 在 $1$ 到 $500$ 之间的情况,最多会有 $125\,250$ 次对 HC(N) 的调用。

子任务 2 [25 分]

HC(N) 调用 Guess(G) 的次数最多为 $18$ 次。对于 $N$ 在 $1$ 到 $500$ 之间的情况,最多会有 $125\,250$ 次对 HC(N) 的调用。

子任务 3 [25 分]

HC(N) 调用 Guess(G) 的次数最多为 $16$ 次。对于 $N$ 在 $1$ 到 $500$ 之间的情况,最多会有 $125\,250$ 次对 HC(N) 的调用。

子任务 4 [最高 25 分]

令 $W$ 为满足 $2^W \le 3N$ 的最大整数。对于此子任务,你的得分规则如下: 如果 HC(N) 调用 Guess(G) 的次数达到 $2^W$ 次或更多,得 $0$ 分。 如果 HC(N) 调用 Guess(G) 的次数最多为 $2^W - \alpha W$ 次,得 $25\alpha$ 分,其中 $\alpha$ 是满足 $0 < \alpha < 1$ 的最大实数。 * 如果 HC(N) 调用 Guess(G) 的次数最多为 $W$ 次,得 $25$ 分。

对于 $N$ 在 $1$ 到 $500\,000\,000$ 之间的情况,最多会有 $1\,000\,000$ 次对 HC(N) 的调用。

请确保每次调用 HC 时都初始化所使用的任何变量。

实现细节

  • 实现文件夹:/home/ioi2010-contestant/hottercolder/
  • 选手需实现:hottercolder.chottercolder.cpphottercolder.pas
  • 选手接口:hottercolder.hhottercolder.pas
  • 评测接口:grader.hgraderlib.pas
  • 样例评测程序:grader.cgrader.cppgrader.pas 以及 graderlib.pas
  • 样例评测输入:grader.in.1, grader.in.2。 说明:输入文件包含多行,每行包含 $N$ 和 Jill 的数字。
  • 样例评测的预期输出:评测程序将创建文件 grader.out.1, grader.out.2 等。
    • 如果实现正确完成了子任务 1,输出的一行将包含 OK 1
    • 如果实现正确完成了子任务 2,输出的一行将包含 OK 2
    • 如果实现正确完成了子任务 3,输出的一行将包含 OK 3
    • 如果实现正确完成了子任务 4,输出的一行将包含 OK 4 alpha α
  • 编译并运行(命令行):runc grader.crunc grader.cpprunc grader.pas
  • 编译并运行(gedit 插件):编辑任何实现文件时,按 Control-R
  • 提交(命令行):submit grader.csubmit grader.cppsubmit grader.pas
  • 提交(gedit 插件):编辑任何实现文件或评测文件时,按 Control-J

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.