QOJ.ac

QOJ

Time Limit: 6 s Memory Limit: 256 MB Total points: 100

#12021. 德州扑克

Statistics

九条可怜最近经常和她的好朋友一起打德州扑克,但是因为可怜不太聪明,所以她总是被她的朋友们暴打。因此,她想让你写一个程序来提升她的德扑水平。

一副去掉大小王的扑克牌包含 $13$ 种不同的数值:$2,3,4,5,6,7,8,9,T,J,Q,K,A$,它们的大小从左到右依次递增。扑克牌中有四种不同的花色,用 $0,1,2,3$ 表示,每一种花色都有 $13$ 张牌,分别对应每一种数值。在德州扑克中,我们只需要考虑这 $52$ 张牌。

一副手牌包含 $5$ 张扑克牌,他们可能会形成若干种牌型,按照从大到小的顺序依次为:

  1. 同花顺:花色相同的顺子(顺子的定义见下方),例如同花色的 $T,J,Q,K,A$。
  2. 四条:存在四张大小相同的牌,例如任意花色的 $T,T,T,T,2$。
  3. 葫芦:有三张牌大小相同,另外两张牌大小相同,例如任意花色的 $T,T,T,J,J$。
  4. 同花:五张牌花色相同,例如同花色的 $7, J,Q,K,A$。
  5. 顺子:五张牌大小连续,例如任意花色的 $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$。
  6. 三条:存在三张大小相同的牌,例如任意花色的 $T,T,T,J,Q$。
  7. 两对:存在两个大小不同的对子(一个对子是两张大小一样的牌),例如任意花色的 $T,T,Q,Q,K$。
  8. 对子:存在两张大小相同的牌,例如任意花色的 $T,T,J,Q,K$。
  9. 高牌:不满足以上任何一个牌型的手牌都是高牌。

一副手牌可能同时满足很多个不同的牌型,这个时候我们会把最大的那个牌型作为这副手牌的牌型。

我们可以通过如下方式来比较两副手牌的大小:

  • 如果两副手牌牌型不同,那么牌型较大的手牌更大。
  • 如果两副手牌都是顺子或者都是同花顺,那么按照顺子第一张牌的大小排序,从小到大分别为 $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$。

About Issues

We understand that our problem archive is not perfect. If you find any issues with the problem, including the statement, scoring configuration, time/memory limits, test cases, etc.

You may use this form to submit an issue regarding the problem. A problem moderator will review your issue and proceed it properly.

STOP! Before you submit an issue, please READ the following guidelines:

  1. This is not a place to publish a discussion, editorial, or requests to debug your code. Your issue will only be visible by you and problem moderators. Other users will not be able to view or reply your issues.
  2. Do not submit duplicated issues. If you have already submitted one, please wait for an moderator to review it. Submitting multiple issues will not speed up the review process and might cause your account to be banned.
  3. Issues must be filed in English or Chinese only.
  4. Be sure your issue is related to this problem. If you need to submit an issue regarding another problem, contest, category, etc., you should submit it to the corresponding page.

Active Issues 0

No issues in this category.

Closed/Resolved Issues 0

No issues in this category.