AT_past17_n.ソフトウェアアップデート
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
高桥打算更新 N 个应用,编号分别为 app 1,app 2,…,app N。
更新第 i 个应用(1≤i≤N)需要 Ti 单位时间。
高桥可以自选应用的更新顺序。
从时间 0 开始,他的电脑会按照指定顺序逐个更新应用。
具体来说,若他选择第 i 个被更新的应用为 app pi,则电脑会按如下方式工作:
- 第 k 个被更新的应用 app pk,会从时间 (Tp1+Tp2+⋯+Tpk−1) 开始更新,到 (Tp1+Tp2+⋯+Tpk−1+Tpk) 结束。
他想要选择合适的顺序,使得在更新过程中查看进度时,能尽可能准确地估算全部更新所需的总时长。
然而,在更新过程中,他只能获得一个整数 k,表示当前正在进行第 k 次更新。
若他发现自己在时间 t 正处于第 k 次更新,则他对于总更新时长的估算为 f(t)=k−0.5N⋅t。
其中,在第 i 次更新刚开始时,他认为正在进行第 i 次更新。具体地,在时间 0 时,他认为正在进行第 1 次更新;每当第 i 次更新结束并且第 (i+1) 次更新开始时,他认为正在进行第 (i+1) 次更新。
记全部更新的总时长为 S=∑i=1NTi。
假设他在 t 时刻进行估算,其中 t 从 0(包含)到 S(不包含)之间均匀随机选择,求在最优顺序下,他估算误差 ∣f(t)−S∣ 的期望值的最小值。
输入格式
输入按以下格式从标准输入读入:
N T1 T2 … TN
输出格式
请输出最小期望值 ∣f(t)−S∣。
当你的答案与正确答案的绝对误差或相对误差不超过 10−6 时,将被判定为正确。
输入输出样例
输入#1
2 3 7
输出#1
3.066666666666667
输入#2
3 3 1 1
输出#2
1.420000000000000
说明/提示
样例解释 1
全部更新所需总时长为 S=3+7=10。
若指定更新顺序为 1→2,在 0≤t<10 时,他对总时长 f(t) 的估算如下:
- 0≤t<3 时,f(t)=1−0.52⋅t=4t;
- 3≤t<10 时,f(t)=2−0.52⋅t=34t。
当 t 在 0≤t<10 范围内等概率随机选取时,∣f(t)−S∣ 的期望为 1546=3.066⋯,这是可能达到的最小值。
样例解释 2
如果指定顺序为 1→3→2,则 ∣f(t)−S∣ 的期望取最小值。
数据范围
- 2≤N≤18
- 1≤Ti≤106
- 所有输入值均为整数。
由 ChatGPT 5 翻译
输入解题思路,AI测评打分。不知道怎么写?