Justin 和 Donald 正在玩他们最喜欢的游戏:跳棋。你可能没听说过它,但规则非常简单。
棋盘是一个矩形网格,每个方格最初恰好有一个玩家的棋子。Justin 的棋子用 $J$ 表示,Donald 的棋子用 $D$ 表示。每个玩家最初在网格上至少有一个棋子。
游戏由 Justin 先手。在每一回合中,玩家可以将自己的一枚棋子移动到相邻的棋子上进行捕获(从而将其从棋盘上移除,不一定是对手的棋子)。如果一枚棋子 $X$ 位于另一枚棋子 $Y$ 的上、下、左或右方,则称 $X$ 与 $Y$ 相邻。如果无法进行这样的移动,则当前行动的玩家输掉比赛。
在理想世界中,Justin 和 Donald 都是完美的逻辑学家,能够为任何棋盘局面辨别出最优策略。那么我们可能会对他们两人中谁会获胜感兴趣。但这并不现实。实际上,在游戏时,Justin 和 Donald 都能想出相对较好的解决方案;他们表现得有多好取决于他们各自的误差因子,分别为 $J$ 和 $D$。
形式上,误差因子为 $A$ 的当前行动玩家首先选择一个建议集合(proposal set):如果可能移动的总数小于或等于 $A$,则该集合为所有可能移动的集合;如果可能移动的总数大于 $A$,则该集合为所有可能移动集合的一个大小为 $A$ 的子集。然后,玩家从这个建议集合中以相等的概率随机选择一个移动。
当两名玩家可以选择他们的建议集合时,他们都会选择最优化该集合(即产生最高获胜概率的集合),并假设对方也总是最优地选择他们的建议集合。
那么,给定初始棋盘、$J$ 和 $D$,Justin 赢得跳棋游戏的概率究竟是多少?
输入格式
输入的第一行包含两个空格分隔的正整数 $R, C$ ($R \cdot C \le 13$)。接下来的 $R$ 行包含由 $\{J, D\}$ 中的字符组成的字符串,描述初始棋盘状态。最后一行包含两个空格分隔的整数 $J, D$ ($1 \le J, D \le 13$)。
输出格式
输出一个四舍五入到小数点后 3 位的浮点数:Justin 获胜的概率。
样例
样例输入 1
1 3 JJD 3 1
样例输出 1
0.667
说明 1
注意 Justin 有 3 种可能的移动(注意下文中的 _ 表示空单元格):
- 他将第一枚棋子向右移动,捕获第二枚棋子,导致棋盘变为
_JD,从而确保他输掉比赛; - 他将第二枚棋子向右移动,捕获 Donald 的棋子并确保胜利,棋盘变为
J_J; - 或者他将第二枚棋子向左移动,捕获自己的棋子,但导致 Donald 无法移动,从而也获胜,棋盘变为
J_D。
显然,后两种情况是最优的——但由于 Justin 的误差因子为 3,他有 1/3 的概率选择导致他输掉比赛的选项。因此他获胜的概率为 2/3。
样例输入 2
2 2 JJ DD 3 1
样例输出 2
0.000
说明 2
Justin 没有获胜的希望。
为了明白原因,请注意 Justin 有 4 种可能的首步移动:
J_ _J J_ _J DD DD DJ JD
他可以从上述移动中选择任何大小为 3 的子集。
然而,Donald 总是会选择他最优化的一步。无论 Justin 的首步移动如何,Donald 都会将棋盘留为以下配置之一:
D_ _J _D J_ _D D_ D_ _D
所有这些都会导致 Justin 输掉比赛。