描述
有 n 个人在一个水龙头前排队接水,假如每个人接水的时间为 Ti,请编程找出这 n 个人排队的一种顺序,使得 n 个人的平均等待时间最小。
输入
第一行为一个整数 n。
第二行有 n 个整数,第 i 个整数 Ti,表示第 i 个人的接水时间 Ti。
输出
输出有两行:
- 第一行为一种平均时间最短的排队顺序;
- 第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。
输入样例 1
10
56 12 1 99 1000 234 33 55 99 812
输出样例 1
3 2 7 8 1 4 9 6 10 5
291.90
样例解释
排序后的接水时间为:1, 12, 33, 55, 56, 99, 99, 234, 812, 1000(按下标 3, 2, 7, 8, 1, 4, 9, 6, 10, 5)。
等待时间计算:
- 第1人:0(无需等待)
- 第2人:1(前1人的时间)
- 第3人:1+12=13
- 第4人:1+12+33=46
- 第5人:1+12+33+55=101
- 第6人:1+12+33+55+56=157
- 第7人:1+12+33+55+56+99=256
- 第8人:1+12+33+55+56+99+99=355
- 第9人:1+12+33+55+56+99+99+234=589
- 第10人:1+12+33+55+56+99+99+234+812=1401
总等待时间:
$0 + 1 + 13 + 46 + 101 + 157 + 256 + 355 + 589 + 1401 = 2919$
平均等待时间:
102919=291.9
提示
- n≤1000
- Ti≤106
- 不保证 Ti 不重复。