AT_abc008_3.[ABC008C] コイン
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
高桥君有 N 枚可以区分正反面的硬币。每枚硬币的大小不同,每枚硬币上都写有一个正整数。
他将这些硬币随机(所有 N! 种排列出现的概率相同)排成一行。然后,执行以下操作:
- 将所有硬币翻到正面朝上。
- 从左到右依次处理每一枚硬币,对于当前正在看的硬币,找到其右侧(不包括自身)所有硬币中,硬币上所写整数是当前硬币上整数的倍数的那些硬币,将它们全部翻面。
高桥君想知道,操作结束后正面朝上的硬币数量的期望值。
请你帮高桥君编写程序,计算这个期望值。
输入格式
输入通过标准输入给出,格式如下:
N
C1
C2
⋮
CN
- 第 1 行为一个整数 N,表示硬币的数量,1≤N≤100。
- 接下来的 N 行,第 i 行为一个整数 Ci,表示第 i 枚硬币上写的正整数,1≤Ci≤109。
输出格式
输出操作结束后正面朝上的硬币数量的期望值。绝对误差或相对误差不超过 10−6 即可。输出末尾需换行。
输入输出样例
输入#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
说明/提示
部分分
本题设置了部分分。
- 对于满足 N≤8 的数据集 1,答对可得 99 分。
- 对于无额外限制的数据集 2,答对可再得 1 分,满分 100 分。
样例解释 1
硬币上从小到大分别写着 2、4、8。例如,在 3! 种排列中,若硬币按大小升序排列,则操作如下:
- 初始时,所有硬币正面朝上,状态为 [正,正,正]。
- 接着,在左起第 2 个及其右侧的硬币中,查找写有 2 的倍数的硬币。左起第 2 个和第 3 个硬币满足条件,将它们翻面,状态变为 [正,反,反]。
- 然后,在左起第 3 个及其右侧的硬币中,查找写有 4 的倍数的硬币。只有左起第 3 个硬币满足条件,将其翻面,状态变为 [正,反,正]。
硬币正反变化如下图所示,白色为正面,黑色为反面。

对于全部 3!=6 种排列,每种排列下最终状态如下图所示。

因此,期望值为 13/6=2.16666666666…。
样例解释 2
无论排列顺序如何,最终状态总是 [正,反,正,反]。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?