爆搜题
题号:NC17191
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

德克萨斯扑克是一种风靡全球的游戏,下面将介绍它的规则。

它由52张标准牌组成(除去鬼牌),有4种花色(黑桃,红心,方片和梅花),13种不同类型的牌A、K、Q、J、2、3、4、5、6、7、8、9、10。

游戏由两名玩家进行。一开始每一名玩家抽两张牌并将面朝下,称为底牌。底牌将不会公示出来直到比较阶段。接着主持人将会在剩下的牌中再抽出三张当做公共牌,也就是说,这三张牌是两名玩家都有所有权的。

之后主持人会在剩下来的牌中,再抽出两张牌,一共组成5张双方玩家都可以使用的牌。主持人在确定公共牌之后,扑克游戏进行比较环节。每个玩家展示自己的底牌,并且从7张牌(自己的底牌+5张公共牌)中选出5张来成为自己的手牌(注意:公共牌双方都可以使用,也就是说可以允许某张公共牌同时成为两名玩家的手牌),根据组出来的手牌的强度来决定胜负。

下面是10种可能的手牌类型,从强到弱排序如下:

  • 同花大顺:由同花色的A、K、Q、J、10组成,可以看做是同花顺的一种特殊情况。
  • 同花顺:由同花色的顺子组成(如:7、6、5、4、3)。
  • 四条:由4张同类型的牌组成。
  • 满堂红:三张同类型的牌,再带上一个另一种类型的对子。
  • 同花:5张同花色的牌,不要求组成顺子。
  • 顺子:5张组成顺子的牌,不要求相同花色。
  • 三条:三张同类型的牌组成。
  • 双对子:两张相同类型的牌,再带上另一种类型的对子。
  • 对子:两张同类型的牌。
  • 高牌:除去上面几种特殊类型的杂手牌。

对于组成顺子而言,J、Q、K可以分别被看做11、12、13。A既可以被看做14,也可以看做1,也就是说A、K、Q、J、10是一个合法的顺子,5、4、3、2、A也是一个合法的顺子,但是3、2、A、K、Q不是一个合法的顺子。

玩家各自从自己手牌中挑出最强的手牌类型组,如果两名玩家挑出来都是同类型的手牌类型,那么将对该类型的手牌类型进行比较。特别地,比较方法如下:

  • 同花大顺:算作平局。
  • 同花顺:比较最大的那张牌。
  • 四条:先比较组成四条的牌面的大小,相同则比较剩下的那张牌。
  • 满堂红:先比较组成三张同类型的牌的牌面大小,相同则再去比较对子的牌面大小。
  • 同花:从牌面大小从大到小排序,依次比较。
  • 顺子:比较最大的那张牌。
  • 三条:先比较组成的三张同类型的牌的牌面大小,相同则再去从大到小比较剩下的两张牌。
  • 双对子:先比较牌面较大的那个对子,相同则再比较牌面较小的那个对子,仍相同再比较剩下的那张牌。
  • 对子:比较对子的牌面大小,相同再去从大到小比较剩下的三张牌。
  • 高牌:从大到小依次比较。

特别注意:牌的花色不影响牌面大小的比较。

对于牌面的大小,顺序从大到小依次是A,K,Q,J,10,9,…,2。当A在顺子中被视为1的时候,A的大小位置被视为比2更小。

下面来举出一些例子来方便进行理解。

  • J、J、J、6、3和K、K、Q、Q、8:前面的牌型是三条,后面的是双对子,前面的更大。
  • J、J、J、6、3和K、Q、8、8、8:两个都是三条,但是J更大,所以还是前面的大。
  • Q、J、8、6、3和Q、J、8、5、3:两个都是高牌,于是依次比较,其中Q、J、8都一样,比到第四张牌的时候发现还是前面的大。
  • 9、9、Q、7、2和9、9、J、8、5:两个都是单对子,且对子牌面大小一样,接着比较剩余的牌,发现Q较大,因此前面的大。

在世纪之交的x000年,M国最高的人W来到了Mr. F的王国,并进行了一次高水平的采访。这次采访的剪辑录像后来被收入了Mr. F的经典视频资料集中。

采访之余,W提出想和Mr. F进行一场公平的对决,于是选定了德州扑克这一游戏。Mr. F无所不知,在底牌和前三张公共牌已经抽出的时候,他已经知道了W的两张底牌是什么,而剩下的两张牌将随机从牌组中抽出。(也就是说,Mr. F已经知道了双方的底牌和三张公共牌的类型和花色)

Mr. F希望知道剩下两张牌随机抽出的情况下,他和W赌上了国家荣誉全力以赴比赛的情况下,Mr. F获胜的概率有多大。Mr. F认为平局意味着W能达到他的水平,这是他不能容忍的,所以他认为平局不算获胜。

输入描述:

本题有多组测试数据,测试数据以一个#结束。

对于一张牌,用两个字符构成: 第一个字符为S、H、D、C的一种,分别表示黑桃、红心、方片、梅花。第二个字符为A、K、Q、J、T,和2到9的一种, 其中T代表10。

对于每一组测试数据,由三行组成:

第一行有两个字符串,表示Mr. F的两张底牌。

第二行有两个字符串,表示W的两张底牌。

第三行有三个字符串,表示已抽出的三张牌。

输出描述:

每组数据输出一个实数,表示Mr. F获胜的概率,四舍五入到小数点后3位。
示例1

输入

复制
SA SK
DA CA
SQ SJ ST
SA HA
D2 C3
H4 S5 DA
HA D9
H6 C9
H3 H4 H5
#

输出

复制
1.000
0.344
0.630

备注:

对于100%的数据,测试数据组数≤6。