13069 - 排队接水
时间限制 : 1 秒
内存限制 : 64 MB
有 n 个人在一个水龙头前排队接水。每个人接水所需的时间为 T_i 。
请你安排一种排队顺序,使得所有人的平均等待时间最小。
- 等待时间:每个人从开始排队到轮到自己接水所花费的时间(不包括自己接水的时间)。
- 总等待时间 = 第1个人等待0 + 第2个人等待 T_1 + 第3个人等待 T_1 + T_2 + …
- 平均等待时间 = 总等待时间 / n 。
请输出最优的排队顺序(按原编号排列)以及对应的平均等待时间,精确到小数点后两位。
输入
- 第一行包含一个整数 n ( 1 \le n \le 1000 ),表示人数。
- 第二行包含 n 个正整数 T_1, T_2, \dots, T_n ,( 1 \le T_i \le 1000 ),表示每个人接水所需的时间。
输出
- 第一行输出 n 个整数,表示最优排队顺序(原始编号),编号从 1 开始,每两个数之间用一个空格隔开。
- 第二行输出一个实数,表示最小平均等待时间,保留两位小数。
样例
输入
10 56 12 1 99 1000 234 33 55 99 812
输出
3 2 7 8 1 4 9 6 10 5 291.90
提示
样例说明
- 按接水时间从小到大排序,对应编号顺序为 3(1), 2(12), 7(33), 8(55), 1(56), 4(99), 9(99), 6(234), 10(812), 5(1000)。
- 总等待时间 = 0 + 1 + 13 + 46 + 101 + 157 + 256 + 355 + 589 + 1401 = 2919?实际计算:按顺序,等待时间分别为:0, 1, 1+12=13, 13+33=46, 46+55=101, 101+56=157, 157+99=256, 256+99=355, 355+234=589, 589+812=1401,总和 = 0+1+13+46+101+157+256+355+589+1401 = 2919。平均 = 2919/10 = 291.9,输出 291.90。
数据范围与约定
- 1 \le n \le 1000
- 1 \le T_i \le 1000
来源
课课通