1591: Risk

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:0 解决:0

题目描述

  Risk是一个简易的策略游戏,玩家的目的是占领所有的土地。
  每一场战役,玩家可以选择自己所控制的任意一个兵力大于等于 2 地区去进攻相邻地区的敌军。进攻方每次会留一个兵在原地区,把所有剩下的兵力投入战斗,而防守方会集结该地区的全部兵力防守。战斗时,双方不是舞枪弄棒,而是投骰子……战斗是回合制的,每回合,当前战场上兵力的大小决定了骰子的数量。进攻方最多出 3 个骰子,防守方最多出 2 个骰子,不足这么多人的,有几个人就出几个骰子。双方的骰子都按照各自的大小顺序排序,最大的和最大的比,次大的和次大的比,多出的骰子没有用。谁的骰子大就算谁胜,点数相同时防守方获胜,对方每胜利一个骰子,己方就死掉一个士兵。照此反复进行若干回合,当最后一回合结束时,即某一方战场上的兵力为 0 时,该方战败此战斗。
  如图,apple 将军正发起了一场战役,攻打 Freire 将军的一支部队。apple 将军的部队有 8 个士兵,但实际上他只能派出 7 个参加战斗,而 Freire 将军的三个士兵全部参加了战斗。图中的骰子描述了这场战役第一回合的战况,apple 将军掷出了 4、3、2 点,Freire 将军掷出了 6 点和 4 点。所以这一回合结束后,apple 将军将会损失两个士兵,也就是说,第二回合开始时,apple 将军只剩下 5 个士兵和 Freire 将军的部队进行战斗。这场战斗一直会持续到有一方全军覆没。
  虽然玩 Risk 需要良好的 RP 作为保证,但一些适当的计算还是能帮我们更轻松地赢得胜利。为了能方便自己更好地决策,你需要写一个程序,根据对战双方的兵力,计算出战斗胜负分出时,进攻方剩余兵力的期望。
  所有骰子都是六面的,而且掷到每个数字的概率均相同,各骰子所掷数字相互独立。进攻方由于会留一个兵在原地区,所以最后剩余兵力的期望总不小于 1。

输入

  第一行 n (1≤n≤100) ,表示下面有几组数据。
  以下 2 到 n+1 行,每行两个数字 a d (1≤a<500, 1≤d<500),用空格隔开,分别表示进攻方和防守方的人数。

输出

  共 n 行,每行一个数字,对应输出每种情况下进攻方战斗后剩余人数的期望,保留3位小数。

样例输入 复制

3
1 1
2 1
2 2

样例输出 复制

1.000
1.417
1.106

提示

第一组数据:进攻方由于要留一个士兵在原地区,战斗实际上没有发生,进攻方最后剩下一个人。
第二组数据:进攻方出一个兵,防守方出一个兵,进攻方获胜的概率为41.7%
第三组数据:进攻方出一个兵,防守方出两个兵。有两种可能:1.只进行了一回合,进攻方失败;2.进行了两回合,其中第一回合进攻方胜利,第二回合不定。 另:比赛期间提供游戏试玩下载,方便了解规则:http://coder.buct.edu.cn/oj/contest/risk/risk.rar