#THU2021015. [清华预推免机试 2021 校外] Phi 的游戏
[清华预推免机试 2021 校外] Phi 的游戏
时间限制: 1.5 秒
空间限制: 512 MB
提交前的提示: 如果想使用 C++
输出指定位数的小数,可以使用 stdio.h
库或者 iostream
以及 iomanip
库。例:将浮点数 保留三位小数输出可以使用 printf("%.3f", x)
或者 std::cout << std::fixed << std::setprecision(3) << x
。
题目描述
Picar 和 Roman 是两个非常喜欢玩各种游戏的赌徒。这一天,他们又发现了一种新的数字游戏,名叫 的游戏 (Phi Games)。
的游戏是双人游戏,每局游戏由任意一个正整数 开始,由两人轮流对当前的数字进行操作。轮到其中任意一方进行操作时,玩家可以有以下三种选择:
- 大喊: " ! " 并将当前的数字 变为 ;
- 大喊: " ! " 并将当前的数字 变为 ;
- 大喊: " ! " 并将当前的数字 变为 ,其中 是一个双方在开始游戏之前约定好的非负整数。
其中 表示的是在 到 这 个正整数中,有多少个正整数与 互质,如 。根据这一定义可知, 的定义域是 ,所以如果选择第 3 种操作 " ! ",需要保证当前的数字 。
两名玩家轮流操作,如果谁在进行操作之后得到了已经出现过的数字,谁就输掉了本局游戏。例如,玩家 A 对当前的数字 选择了操作 1 " ! ",由于 是出现过的数字,玩家 A 输掉本局游戏,对手获胜。
的游戏考验了玩家的心算能力和逻辑推理能力。可惜,由于 Picar 和 Roman 足够聪明,只要指定一个 和最开始的数字 ,他们就可以算出是先手还是后手有必胜策略。如果对于某个确定的 ,以 开始游戏时先手有必胜策略,则称这个 为先手必胜态;否则后手有必胜策略,称 为后手必胜态。为了使得这个游戏(对他们来说)更有趣,他们决定对游戏进行扩展:
- 玩家先指定 ,并选择两个正整数 ,由系统在 中的先手必胜态中随机挑选一个 作为右端点;
- 由后手选择一个正整数左端点 ,需要保证 ;
- 开始一局游戏时,系统从 中等概率地挑选一个正整数 ,作为游戏开始时先手操作的数字。
尽管 Picar 和 Roman 足够聪明,计算修改后的游戏对他们来说也需要花费不少的时间。于是,他们找到了你,想让你帮忙计算一下修改后的游戏平衡性。即:给定参数 ,求后手对于任意 能选出最优的 使得后手胜率最大时,先手的平均胜率。
输入格式
从标准输入读入数据。
输入仅一行,包含三个非负整数 ,含义如题目描述所示。保证 ,且在 中至少存在一个先手必胜态。
输出格式
输出到标准输出。
输出一个实数,表示在给定的参数 下,修改后的游戏的先手平均胜率。
记答案为 ,而你的输出为 ,那么当且仅当 时我们认为你的输出是正确的。
1 10 3
0.533333333333333333
样例 1 解释
此时 为先手必胜态, 为后手必胜态。
- 对应的最优左端点 为 ,此时先手胜率为 ;
- 对应的最优左端点 为 ,此时先手胜率为 ;
- 对应的最优左端点 为 ,此时先手胜率为 ;
- 对应的最优左端点 为 ,此时先手胜率为 ;
- 对应的最优左端点 为 ,此时先手胜率为 ;
- 对应的最优左端点 为 ,此时先手胜率为 。
故先手的平均胜率为 。
2021 5000 0
0.391970630667343944
214 7483648 57721
0.490802831707061571
子任务
对于所有的数据,保证 ,在 中至少存在一个先手必胜态。
测试点编号 | 特殊性质 | |
---|---|---|
无 | ||
无 | ||
无 | ||
Related
In following contests: