#abc0083. [abc008_3]コイン
[abc008_3]コイン
问题描述
高桥君有 枚可以区分正反面的硬币。这些硬币的大小不同,并且每个硬币上都写着一个正整数。
他将这些硬币随机地(以 种可能的组合出现的概率相同的方式)排列在一行上。然后,执行以下操作:
- 所有硬币都正面朝上。
- 从最左侧的硬币开始,依次对当前正在查看的硬币右边的硬币(不包括自己),如果这些硬币上写的整数是当前正在查看的硬币上写的整数的倍数,则将这些硬币的正反面翻转。
高桥君想知道在执行完操作后正面朝上的硬币的期望数量。
请你代替高桥君编写一个程序来计算期望值。
输入
输入从标准输入给出,具体格式如下:
:
- 第 行给出一个整数 ,表示硬币的数量。
- 第 行到第 行,每行给出一个整数 ,表示第 枚硬币上写的整数。
部分分
本问题设置了部分分。
- 对于满足 的数据集 给出正确答案,将得到 分。
- 对于没有额外限制的数据集 给出正确答案,再加 分,总共可得 分。
输出
输出正面朝上的硬币的期望数量。允许输出结果绝对误差或相对误差不超过 。在输出末尾需换行。
示例1
3
2
4
8
输出示例1
2.166666666667
硬币上写的数分别为 、、。例如,对于 中不同排列的情况下,执行操作后的步骤如下:
- 初始状态下,所有硬币都是正面朝上,从左到右依次为 [
正
,正
,正
]。 - 然后,检查从第 枚硬币开始的右边硬币中,有哪些硬币上写的数是 的倍数。第 枚硬币和第 枚硬币是符合条件的,将它们翻转。结果,硬币从左到右依次为 [
正
,反
,反
]。 - 接下来,检查从第 枚硬币开始的右边硬币中,有哪些硬币上写的数是 的倍数。只有第 枚硬币符合条件,将它翻转。结果,硬币从左到右依次为 [
正
,反
,正
]。
硬币的正反面变化如下图所示。其中,白色的硬币表示正面朝上,黑色的硬币表示反面朝上。
按照以上操作, 种不同排列的情况下,最终状态分别如下图所示。
因此,期望值为 。
示例2
4
5
5
5
5
输出示例2
2.000000000000
无论以何种顺序排列,从左到右分别为 [正
, 反
, 正
, 反
]。
示例3
5
2
3
2
6
12
输出示例3
3.100000000000