在游戏《英雄联盟》(League of Legends™)中,有一种名为“ARAM”的游戏模式,意为“全随机,全中路”(All Random, All Mid)。本题借用了这一概念,但不需要你玩过《英雄联盟》也能理解。
每当你开始一场 ARAM 游戏时,系统会从 $N$ 个“英雄”中随机分配给你一个,每个英雄被选中的概率相等。由于使用不同英雄获胜的概率不同,如果你运气不好,可能会希望换一个英雄。幸运的是,游戏包含“重随”(Reroll)功能。
重随会以如下方式随机重新分配给你一个英雄;但你不能随时重随。 重随能力类似于一种货币。在进行第一场 ARAM 游戏之前,你拥有 $R$ 点 RD(重随点数)。你只有在至少拥有 1 点 RD 时才能进行重随,且每次重随需要消耗 1 点 RD。每场游戏结束后,你会获得 $1/G$ 点 RD(其中 $G$ 为整数),但你拥有的 RD 总数不能超过 $R$:如果你在游戏前拥有 $R$ 点 RD,那么游戏结束后你依然拥有 $R$ 点 RD。
如果你至少拥有 1 点 RD,且选择重随,你将消耗 1 点 RD 并被随机重新分配 $N$ 个英雄中的一个,每个英雄被选中的概率相等。你有可能再次获得最初分配到的那个英雄。如果你对重随后的英雄不满意,且此时你仍至少拥有 1 点 RD,你可以再次重随。只要你拥有至少 1 点 RD,就可以一直重随。
例如,如果 $R=2$ 且 $G=2$,你在第一场游戏中进行了一次重随,那么第一场游戏结束后你将拥有 $1.5$ 点 RD。如果你接着玩下一场游戏且不进行重随,你将拥有 $2.0$ 点 RD。如果你再玩一场且不重随,你依然拥有 $2.0$ 点 RD(因为你拥有的 RD 不能超过 $R=2$)。如果你在下一场游戏中进行了两次重随,那么该场游戏结束后你将拥有 $0.5$ 点 RD。
给定英雄列表以及使用每个英雄获胜的概率。如果你玩 $10^{100}$ 场游戏并采取最优策略,你期望获胜的比例是多少?
输入格式
输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行包含三个空格分隔的整数:$N$、$R$ 和 $G$。下一行包含 $N$ 个空格分隔的实数 $P_i$,表示使用英雄 $i$ 获胜的概率。
输出格式
对于每个测试用例,输出一行 "Case #x: y",其中 $x$ 是测试用例编号(从 1 开始),$y$ 是你玩 $10^{100}$ 场游戏后期望获胜的比例。
如果 $y$ 与正确答案的绝对误差或相对误差不超过 $10^{-10}$,则视为正确。请参阅 FAQ 以了解其含义及我们接受的实数格式。
数据范围
内存限制:1 GB。
$1 \le T \le 100$。
$0.0 \le P_i \le 1.0$。
$P_i$ 将表示为一位数字,后跟小数点,再后跟 4 位数字。
小数据范围
时间限制:15 秒。
$1 \le N \le 1000$。
$1 \le R \le 2$。
$1 \le G \le 3$。
大数据范围
时间限制:30 秒。
$1 \le N \le 1000$。
$1 \le R \le 20$。
$1 \le G \le 20$。
样例
样例输入 1
3 2 1 1 1.0000 0.0000 3 1 1 1.0000 0.0000 0.5000 6 2 3 0.9000 0.6000 0.5000 0.1000 0.2000 0.8000
样例输出 1
Case #1: 0.750000000000 Case #2: 0.666666666667 Case #3: 0.618728522337
说明
《英雄联盟》是 Riot Games 的商标。Riot Games 不认可且未参与 Google Code Jam。