少于 $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}$