翻牌游戏
题号:NC24904
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

胡老师最近迷上了一款经典小游戏——翻牌。

桌面上有n个互不相同的对子组成的2n张扑克牌,背面朝上放在桌面上。

每一轮,胡老师会选择两张不同的牌翻开,如果这两张牌相同,则将它们消除;如果不同,则将它们盖回去。需要注意的是:胡老师总是先选择两张牌,再同时将它们翻开。

胡老师有个外号叫人形AI,他拥有超强的记忆力,所以他可以记住任何他曾经翻开过的牌的位置。
他现在想知道,在这种情况下,消除所有牌需要的最少期望轮数是多少。

输入描述:

第一行是一个整数,表示数据组数。

接下来T行,每行仅包含一个正整数,表示一共有n个对子(即2n张扑克牌)。

输出描述:

输出共T行。

对每组数据,输出一行一个恰有两位小数的浮点数,表示消除所有牌所需最少期望轮数精确到小数点后两位的结果。
示例1

输入

复制
1
2

输出

复制
3.00

说明

以下叙述n=2时的最优策略。

1. 随机选择两张扑克牌。有\dfrac{1}{3}概率两张牌相同,直接消除,跳至(4);有\dfrac{2}{3}概率不同,跳至(2)。
2. 选择一张已经选过的扑克牌,和一张没有选过的扑克牌。有\dfrac{1}{2}的概率相同,直接消除,跳至(4);有\dfrac{1}{2}的概率不同,跳至(3)。
3. 这时已经知道所有扑克牌的图案,选择一个对子消除,跳至(4)。
4. 消除最后两张扑克牌。

数学期望为:E = \dfrac{1}{3} \times 2 + \dfrac{1}{3} \times 3 + \dfrac{1}{3} \times 4 = 3.00