AT_past17_n.ソフトウェアアップデート

通过率:0%

AC君温馨提醒

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

题目描述

高桥打算更新 NN 个应用,编号分别为 app 11,app 22,…\ldots,app NN。
更新第 ii 个应用(1≤i≤N1\leq i\leq N)需要 TiT_i 单位时间。

高桥可以自选应用的更新顺序。
从时间 00 开始,他的电脑会按照指定顺序逐个更新应用。
具体来说,若他选择第 ii 个被更新的应用为 app pip_i,则电脑会按如下方式工作:

  • 第 kk 个被更新的应用 app pkp_k,会从时间 (Tp1+Tp2+⋯+Tpk−1)(T_{p_1}+T_{p_2}+\cdots+T_{p_{k-1}}) 开始更新,到 (Tp1+Tp2+⋯+Tpk−1+Tpk)(T_{p_1}+T_{p_2}+\cdots+T_{p_{k-1}}+T_{p_k}) 结束。

他想要选择合适的顺序,使得在更新过程中查看进度时,能尽可能准确地估算全部更新所需的总时长。

然而,在更新过程中,他只能获得一个整数 kk,表示当前正在进行第 kk 次更新。
若他发现自己在时间 tt 正处于第 kk 次更新,则他对于总更新时长的估算为 f(t)=Nk−0.5⋅tf(t)=\frac{N}{k-0.5}\cdot t。
其中,在第 ii 次更新刚开始时,他认为正在进行第 ii 次更新。具体地,在时间 00 时,他认为正在进行第 11 次更新;每当第 ii 次更新结束并且第 (i+1)(i+1) 次更新开始时,他认为正在进行第 (i+1)(i+1) 次更新。

记全部更新的总时长为 S=∑i=1NTiS=\sum_{i=1}^N T_i。
假设他在 tt 时刻进行估算,其中 tt 从 00(包含)到 SS(不包含)之间均匀随机选择,求在最优顺序下,他估算误差 ∣f(t)−S∣\lvert f(t)-S\rvert 的期望值的最小值。

输入格式

输入按以下格式从标准输入读入:

NN T1T_1 T2T_2 …\ldots TNT_N

输出格式

请输出最小期望值 ∣f(t)−S∣\lvert f(t)-S\rvert。
当你的答案与正确答案的绝对误差或相对误差不超过 10−610^{-6} 时,将被判定为正确。

输入输出样例

  • 输入#1

    2
    3 7

    输出#1

    3.066666666666667
  • 输入#2

    3
    3 1 1

    输出#2

    1.420000000000000

说明/提示

样例解释 1

全部更新所需总时长为 S=3+7=10S=3+7=10。
若指定更新顺序为 1→21\to 2,在 0≤t<100\leq t<10 时,他对总时长 f(t)f(t) 的估算如下:

  • 0≤t<30\leq t<3 时,f(t)=21−0.5⋅t=4tf(t)=\frac{2}{1-0.5}\cdot t=4t;
  • 3≤t<103\leq t<10 时,f(t)=22−0.5⋅t=43tf(t)=\frac{2}{2-0.5}\cdot t=\frac{4}{3}t。

当 tt 在 0≤t<100\leq t<10 范围内等概率随机选取时,∣f(t)−S∣\lvert f(t)-S\rvert 的期望为 4615=3.066⋯\frac{46}{15}=3.066\cdots,这是可能达到的最小值。

样例解释 2

如果指定顺序为 1→3→21\to 3\to 2,则 ∣f(t)−S∣\lvert f(t)-S\rvert 的期望取最小值。

数据范围

  • 2≤N≤182\leq N\leq 18
  • 1≤Ti≤1061\leq T_i\leq 10^6
  • 所有输入值均为整数。

由 ChatGPT 5 翻译

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

首页