#THU2021015. [清华预推免机试 2021 校外] Phi 的游戏

    ID: 14 Type: Default 1500ms 512MiB Tried: 6 Accepted: 1 Difficulty: 7 Uploaded By: Tags>知识点:省选实现:中等数论欧拉函数筛法博弈论公平组合游戏动态规划斜率优化SPJ清华推研时间2021

[清华预推免机试 2021 校外] Phi 的游戏

时间限制: 1.5 秒

空间限制: 512 MB

提交前的提示: 如果想使用 C++ 输出指定位数的小数,可以使用 stdio.h 库或者 iostream 以及 iomanip 库。例:将浮点数 xx 保留三位小数输出可以使用 printf("%.3f", x) 或者 std::cout << std::fixed << std::setprecision(3) << x

题目描述

Picar 和 Roman 是两个非常喜欢玩各种游戏的赌徒。这一天,他们又发现了一种新的数字游戏,名叫 φ\varphi 的游戏 (Phi Games)。

φ\varphi 的游戏是双人游戏,每局游戏由任意一个正整数 NN 开始,由两人轮流对当前的数字进行操作。轮到其中任意一方进行操作时,玩家可以有以下三种选择:

  1. 大喊: " φ:1\varphi : 1 ! " 并将当前的数字 nn 变为 φ(n)\varphi(n);
  2. 大喊: " φ:2\varphi : 2 ! " 并将当前的数字 nn 变为 φ(2n)\varphi(2n);
  3. 大喊: " φ:K\varphi : K ! " 并将当前的数字 nn 变为 φ(nK)\varphi(n-K),其中 KK 是一个双方在开始游戏之前约定好的非负整数。

其中 φ(n)\varphi(n) 表示的是在 11nnnn 个正整数中,有多少个正整数与 nn 互质,如 φ(1)=1, φ(4)=2, φ(10)=4\varphi(1)=1,~\varphi(4)=2,~\varphi(10)=4。根据这一定义可知,φ(n)\varphi(n) 的定义域是 N+\mathbb{N}^+,所以如果选择第 3 种操作 " φ:K\varphi : K ! ",需要保证当前的数字 n>Kn>K

两名玩家轮流操作,如果谁在进行操作之后得到了已经出现过的数字,谁就输掉了本局游戏。例如,玩家 A 对当前的数字 11 选择了操作 1 " φ:1\varphi : 1 ! ",由于 φ(1)=1\varphi(1)=1 是出现过的数字,玩家 A 输掉本局游戏,对手获胜。

φ\varphi 的游戏考验了玩家的心算能力和逻辑推理能力。可惜,由于 Picar 和 Roman 足够聪明,只要指定一个 KK 和最开始的数字 NN,他们就可以算出是先手还是后手有必胜策略。如果对于某个确定的 KK ,以 NN 开始游戏时先手有必胜策略,则称这个 NN 为先手必胜态;否则后手有必胜策略,称 NN 为后手必胜态。为了使得这个游戏(对他们来说)更有趣,他们决定对游戏进行扩展:

  • 玩家先指定 KK,并选择两个正整数 L,RL,R,由系统在 [L,R][L, R] 中的先手必胜态中随机挑选一个 rr 作为右端点;
  • 由后手选择一个正整数左端点 ll,需要保证 1lr1\le l\le r
  • 开始一局游戏时,系统从 [l,r][l,r] 中等概率地挑选一个正整数 NN,作为游戏开始时先手操作的数字。

尽管 Picar 和 Roman 足够聪明,计算修改后的游戏对他们来说也需要花费不少的时间。于是,他们找到了你,想让你帮忙计算一下修改后的游戏平衡性。即:给定参数 L,R,KL,R,K,求后手对于任意 rr选出最优的 ll 使得后手胜率最大时,先手的平均胜率。

输入格式

从标准输入读入数据。

输入仅一行,包含三个非负整数 L,R,KL,R,K,含义如题目描述所示。保证 LRL\le R,且在 [L,R][L,R] 中至少存在一个先手必胜态。

输出格式

输出到标准输出。

输出一个实数,表示在给定的参数 L,R,KL,R,K 下,修改后的游戏的先手平均胜率。

记答案为 aa,而你的输出为 bb,那么当且仅当 ab<106|a-b|<10^{-6} 时我们认为你的输出是正确的。

1 10 3
0.533333333333333333

样例 1 解释

此时 2,4,5,7,9,102,4,5,7,9,10 为先手必胜态,1,3,6,81,3,6,8 为后手必胜态。

  • r=2r=2 对应的最优左端点 ll11,此时先手胜率为 1/21/2
  • r=4r=4 对应的最优左端点 ll33,此时先手胜率为 1/21/2
  • r=5r=5 对应的最优左端点 ll11,此时先手胜率为 3/53/5
  • r=7r=7 对应的最优左端点 ll66,此时先手胜率为 1/21/2
  • r=9r=9 对应的最优左端点 ll88,此时先手胜率为 1/21/2
  • r=10r=10 对应的最优左端点 ll66,此时先手胜率为 3/53/5

故先手的平均胜率为 (1/2+1/2+3/5+1/2+1/2+3/5)/6=8/150.5333(1/2+1/2+3/5+1/2+1/2+3/5)/6=8/15\approx 0.5333

2021 5000 0
0.391970630667343944
214 7483648 57721
0.490802831707061571

子任务

对于所有的数据,保证 1LR107, 0K1071\le L\le R\le 10^7,~0\le K\le 10^7,在 [L,R][L,R] 中至少存在一个先手必胜态。

测试点编号 L,RL,R\le 特殊性质
11 66 K<RK<R
22 1010
33 1616
44 1818
55 10001000
66 20002000
77 30003000
88 50005000
99 10510^5 RL99R-L\le 99
1010
1111
1212
1313 10610^6 RL9R-L\le 9
1414 K=0K=0
1515 K<RK<R
1616 5×1065×10^6 K=0K=0
1717 K<RK<R
1818 10710^7 L=RL=R
1919
2020