QOJ.ac

QOJ

حد الوقت: 1 s حد الذاكرة: 256 MB مجموع النقاط: 100

#18417. 滴水的水龙头

الإحصائيات

少于 $1000$ 名愚蠢的囚犯被关押在监狱里。看守给他们出了一个谜题,如果他们能解开,就能获得释放:

看守准备了一个放有白板的房间。最初,白板上写着数字 $0$。一个“周期”(cycle)定义为以下过程:囚犯们按照固定的顺序逐个进入房间。进入房间后,他们唯一能做的事情就是读取当前写在白板上的数字,并在其位置上写下另一个数字,或者宣布谜题的答案。由于他们非常愚蠢,无法记住过去的信息,因此每次离开房间时,他们都会在自己的衣服上写下一个整数 $-10^{18} \le x \le 10^{18}$,以便下次进入房间时记住它(他们不会擦除之前写下的数字)。如果任何囚犯选择宣布答案,游戏将结束,不再有囚犯进入房间。

整个游戏可以进行多个周期。也就是说,在第一个周期结束后,另一个周期可以开始;在那个周期结束后,又可以开始另一个周期,依此类推。对于周期过程的每一次重复,已知囚犯们将按照与第一周期完全相同的顺序重新进入房间。

因此,在某个周期中白板上写下的最后一个数字,将是下一个周期开始时第一个囚犯读取的第一个数字(如果存在下一个周期的话)。

这个游戏的目的,是让囚犯们找出他们一共有多少人被监禁,而这个信息在游戏开始时显然是对他们保密的。因此,需要宣布的数字就是参与每次周期迭代的囚犯总数。

所有囚犯在听到看守制定的规则后,决定打电话给他们的律师。他们所有人都有同一个律师,那个人其实就是你。你现在可以与每个囚犯进行讨论,并告诉他们所有人遵守同一个策略来进行这个游戏。当然,他们信任你,所以他们会完全按照你告诉他们的方式去做。

你能设计出一个既能让囚犯获得释放,又能达到最大效率的策略吗?

子任务

一个策略的效率有两个参数:任何囚犯在白板上写下的数字的最大绝对值 $M$,以及直到某个囚犯宣布答案所消耗的周期数 $C$。

  • 如果对于某个测试点,该方案给出的策略没有宣布正确的答案,你将获得 $0$ 分。
  • 否则,对于该测试点,你将获得 $80 \times 1.02^{-\sqrt{\max(M^2C-40,0)}} + 20$ 分。

最终得分是所有测试点中获得的最低分数。

实现细节

你需要实现以下函数:

tuple<char, long long, long long> prisonier(long long W, vector<long long> notebook)

该函数接受以下参数:

  • W:当前写在白板上的数字。
  • notebook:写在当前囚犯衣服上的整数列表,按写入的顺序排列。

该函数应返回 {'w', X, Y} 表示在白板上写入 X 并在衣服上写入 Y;或者返回 {'a', X, 0} 表示宣布谜题的答案为 X

代码模板

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

tuple<char, ll, ll> prisonier(ll W, vector<ll> notebook)
{
    return {'a', 1, 0};
}

数据范围

  • 囚犯人数 $< 1000$
  • $-10^{18} \le$ 任何写入的数字 $\le 10^{18}$

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.