九条可怜最近经常和她的好朋友一起打德州扑克,但是因为可怜不太聪明,所以她总是被她的朋友们暴打。因此,她想让你写一个程序来提升她的德扑水平。
一副去掉大小王的扑克牌包含 $13$ 种不同的数值:$2,3,4,5,6,7,8,9,T,J,Q,K,A$,它们的大小从左到右依次递增。扑克牌中有四种不同的花色,用 $0,1,2,3$ 表示,每一种花色都有 $13$ 张牌,分别对应每一种数值。在德州扑克中,我们只需要考虑这 $52$ 张牌。
一副手牌包含 $5$ 张扑克牌,他们可能会形成若干种牌型,按照从大到小的顺序依次为:
- 同花顺:花色相同的顺子(顺子的定义见下方),例如同花色的 $T,J,Q,K,A$。
- 四条:存在四张大小相同的牌,例如任意花色的 $T,T,T,T,2$。
- 葫芦:有三张牌大小相同,另外两张牌大小相同,例如任意花色的 $T,T,T,J,J$。
- 同花:五张牌花色相同,例如同花色的 $7, J,Q,K,A$。
- 顺子:五张牌大小连续,例如任意花色的 $2,3,4,5,6$, $T,J,Q,K,A$。特殊地,$A,2,3,4,5$ 也是一个顺子(但是 $K,A,2,3,4$ 不是)。因此一共有 $10$ 种不同数值的顺子,它们的第一张牌分别是 $A,2,3,4,5,6,7,8,9,T$。
- 三条:存在三张大小相同的牌,例如任意花色的 $T,T,T,J,Q$。
- 两对:存在两个大小不同的对子(一个对子是两张大小一样的牌),例如任意花色的 $T,T,Q,Q,K$。
- 对子:存在两张大小相同的牌,例如任意花色的 $T,T,J,Q,K$。
- 高牌:不满足以上任何一个牌型的手牌都是高牌。
一副手牌可能同时满足很多个不同的牌型,这个时候我们会把最大的那个牌型作为这副手牌的牌型。
我们可以通过如下方式来比较两副手牌的大小:
- 如果两副手牌牌型不同,那么牌型较大的手牌更大。
- 如果两副手牌都是顺子或者都是同花顺,那么按照顺子第一张牌的大小排序,从小到大分别为 $A,2,3,4,5,6,7,8,9,T$,即 $A,2,3,4,5$ 是最小的顺子,$T,J,Q,K,A$ 是最大的顺子。
- 否则,我们按照(出现次数,数值)的双关键字从大到小把这五张牌排序,例如 $K,K,T,T,T$ 排序后就是 $T,T,T,K,K$;$2,T,T,K,A$ 排序后是 $T,T,A,K,2$。
- 比较两副牌的字典序。
注意,牌的花色只影响第一步比较牌型,并不影响后面两步的比大小。
下面是一些例子:
- 相同花色的 $5,6,7,8,9$ 大于相同花色的 $A,2,3,4,5$。
- 相同花色的 $A,2,3,4,5$ 大于相同花色的 $2,4,5,6,7$。
- 任意花色的 $3,3,8,8,K$ 大于任意花色的 $5,5,7,7, A$。
- 任意花色的 $Q,Q,Q,T,T$ 大于任意花色的 $J,J,J,A,A$。
在德州扑克中,一个人的场面包含 $7$ 张扑克牌,这 $7$ 张牌可以形成 $\binom{7}{5}$ 种不同的手牌,而这个人场面的大小等于这些手牌中最大的那一个。
今天,九条可怜找来了她的好朋友六花,来帮她提高德州扑克技术。因为可怜实在是太菜了,所以她们从一种简化版的规则开始练起。游戏过程分为 5 个阶段:
- 准备阶段:
- 首先,可怜和六花分别从一副(去掉大小王)的扑克牌中抽了 $2$ 张牌并公开(即双方都可以看到抽出的这 $4$ 张牌)。
- 剩下的 $48$ 张牌被完全均匀地打乱(即 $48!$ 种顺序等概率出现)。
- 往彩池中加入 $2b$ 枚筹码,同时,可怜和六花各获得 $m$ 枚筹码。
- 轮次1:
- 可怜和六花进行一轮下注(见后文),如果六花选择弃牌,则可怜获胜,游戏结束。
- $48$ 张牌中的最前面的 $3$ 张被公开。
- 轮次2:
- 可怜和六花进行一轮下注,如果六花选择弃牌,则可怜获胜,游戏结束。
- 剩下的 $45$ 张牌中的最前面的 $1$ 张被公开。
- 轮次3:
- 可怜和六花进行一轮下注,如果六花选择弃牌,则可怜获胜,游戏结束。
- 剩下的 $44$ 张牌中的最前面的 $1$ 张被公开。
- 轮次4:
- 可怜和六花进行一轮下注,如果六花选择弃牌,则可怜获胜,游戏结束。
- 每个人的场面由自己在准备阶段摸的 $2$ 张牌加上公开的 $5$ 张牌组成,两个人场面较大的一方赢。如果场面大小相同,则平局。游戏结束。
下面给出一种平局的情况:假设可怜和六花的手牌分别是花色 $0$ 的 $2,3$ 和花色 $1$ 的 $2,3$,公共牌是花色 $2$ 的 $T,J,Q,K,A$,那么两个人的场面都是 $T,J,Q,K,A$ 的同花顺,因此大小相同。
游戏中会进行若干轮下注,为了照顾可怜,她们采用了一种对可怜有利的下注规则:
- 假设下注阶段开始时,可怜手上有 $k$ 枚筹码,可怜需要在 $[0,k]$ 中选择一个整数 $i$,并往彩池中放入 $i$ 枚筹码(这个时候,可怜手上还剩下 $k-i$ 枚筹码)。
- 六花可以选择跟注或者弃牌。如果选择跟注,那么六花也要向彩池中放入 $i$ 枚筹码,游戏继续。如果选择弃牌,则游戏结束,可怜胜利。
不难发现在每轮下注阶段结束后,如果六花没有选择弃牌,那么一定有 (1) 六花和可怜手上剩下的筹码数量相同,(2) 彩池大小为偶数。在游戏结束的时候,如果有一方胜利,则胜利方获得彩池中全部的筹码;如果双方平局,则双方平分彩池中的筹码。
在可怜和六花打牌的时候,你刚好路过,看到了一场进行了一半的牌局。此时:
- 轮次 $s (s \in \{1,2,3\})$ 刚刚开始,可怜和六花还没有开始下注。
- 你看到了双方在准备阶段摸的牌(可怜和六花每人两张),以及当前公开的 $n$ 张牌(在 $s = 1,2,3$ 的时候,$n$ 分别取 $0,3,4$)。
- 彩池中共有 $2w$ 枚筹码,可怜和六花手上各有 $m'$ 枚筹码。
假设在接下来的游戏过程中,可怜和六花都采用最优策略:双方的目标都是最大化游戏结束时,自己手上筹码数的期望值。你需要回答,在游戏结束的时候,可怜手上期望有多少枚筹码。
输入格式
第一行输入一个整数 $T(1 \leq T \leq 10)$ 表示数据组数。
对于每次数据,输入第一行包含三个整数 $s,w,m' (s \in \{1,2,3\}, 0 \leq w, m' \leq 50)$,分别表示当前的游戏轮次,彩池中的筹码数量(的一半),以及可怜和六花手上的筹码数量。
接下来 $4 + n$ 行(其中在 $s = 1,2,3$ 的时候,$n$ 分别取 $0,3,4$),每行包含两个整数 $c_i,w_i(c_i \in \{0,1,2,3\}, w_i \in \{2,3,4,5,6,7,8,9,T,J,Q,K,A\})$,描述了一张牌。其中前两张是可怜的手牌,第 $3-4$ 张是六花的手牌,最后 $n$ 张是当前公开的牌。
输入保证这 $4+n$ 张牌两两不同。
输出格式
对于每组数据输出一行,表示游戏结束时,可怜手上筹码数量的期望。概率以最简分数的形式输出:例如 $3.5$ 就输出 $7/2$;$0$ 就输出 $0/1$;$1$ 就输出 $1/1$;$0.999$ 就输出 $999/1000$。
样例数据
样例 1 输入
3 3 1 10 0 A 1 A 2 A 3 A 1 K 1 Q 0 J 1 T 3 1 3 0 A 1 A 2 A 3 A 1 K 1 Q 0 J 1 T 2 1 10 0 A 1 A 2 A 3 A 1 K 1 Q 0 J
样例 1 输出
12/1 53/11 23/2
样例 2 输入
3 1 1 10 0 A 1 A 2 A 3 A 1 1 10 0 2 1 2 2 2 3 2 1 1 10 0 A 1 Q 2 K 2 J
样例 2 输出
9547907/856152 1591187/142692 12/1
子任务
子任务一($38$ 分),$s = 3$。
子任务二($41$ 分),$s = 2$。
子任务三($21$ 分),$s = 1$。