AT_abc008_3.[ABC008C] コイン

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

高桥君有 NN 枚可以区分正反面的硬币。每枚硬币的大小不同,每枚硬币上都写有一个正整数。

他将这些硬币随机(所有 N!N! 种排列出现的概率相同)排成一行。然后,执行以下操作:

  1. 将所有硬币翻到正面朝上。
  2. 从左到右依次处理每一枚硬币,对于当前正在看的硬币,找到其右侧(不包括自身)所有硬币中,硬币上所写整数是当前硬币上整数的倍数的那些硬币,将它们全部翻面。

高桥君想知道,操作结束后正面朝上的硬币数量的期望值。

请你帮高桥君编写程序,计算这个期望值。

输入格式

输入通过标准输入给出,格式如下:

NN
C1C_1
C2C_2
⋮\vdots
CNC_N

  • 第 11 行为一个整数 NN,表示硬币的数量,1≤N≤1001 \leq N \leq 100。
  • 接下来的 NN 行,第 ii 行为一个整数 CiC_i,表示第 ii 枚硬币上写的正整数,1≤Ci≤1091 \leq C_i \leq 10^9。

输出格式

输出操作结束后正面朝上的硬币数量的期望值。绝对误差或相对误差不超过 10−610^{-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≤8N \leq 8 的数据集 1,答对可得 9999 分。
  • 对于无额外限制的数据集 2,答对可再得 11 分,满分 100100 分。

样例解释 1

硬币上从小到大分别写着 22、44、88。例如,在 3!3! 种排列中,若硬币按大小升序排列,则操作如下:

  1. 初始时,所有硬币正面朝上,状态为 [正,正,正][\text{正}, \text{正}, \text{正}]。
  2. 接着,在左起第 22 个及其右侧的硬币中,查找写有 22 的倍数的硬币。左起第 22 个和第 33 个硬币满足条件,将它们翻面,状态变为 [正,反,反][\text{正}, \text{反}, \text{反}]。
  3. 然后,在左起第 33 个及其右侧的硬币中,查找写有 44 的倍数的硬币。只有左起第 33 个硬币满足条件,将其翻面,状态变为 [正,反,正][\text{正}, \text{反}, \text{正}]。

硬币正反变化如下图所示,白色为正面,黑色为反面。

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

因此,期望值为 13/6=2.16666666666…13/6 = 2.16666666666\ldots。

样例解释 2

无论排列顺序如何,最终状态总是 [正,反,正,反][\text{正}, \text{反}, \text{正}, \text{反}]。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页