Problem C: 排队接水

Problem C: 排队接水

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 128 MiB

Description

有 n 个人在一个水龙头前排队接水,假如每个人接水的时间为 Ti,请编程找出这 n 个人排队的一种顺序,使得 n 个人的平均等待时间最小。


#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
struct water {
    int num, time; // 编号和时间
} p[1010];
bool cmp(water a, water b) {
    ___________; // 返回:a 的时间小于 b 的时间
}
int n, sum = 0;
int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) { // 对于每个同学
        ____________ // 读入第i个同学的时间
        ____________ // 第i个同学的编号是i
    }
    ____________ // 对 p 进行排序
    for (int i = 1; i <= n; i++) { // 对于排序后的每个同学
        ____________  // 输出第i个同学的编号
        sum += (n - i) * p[i].time; // 第  i 个同学,后面有 n - i 个人在等他.
    }
    printf("\n%.2lf\n", ______); // 计算n名同学的平均等待时间。等待时间总和是sum
    return 0;
}

Input

第一行为一个整数 

第二行  个整数,第  个整数  表示第  个人的接水时间 

,不保证  不重复。

Output

输出文件有两行,第一行为一种平均时间最短的排队顺序;第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。

Sample Input Copy

10 
56 12 1 99 1000 234 33 55 99 812

Sample Output Copy

3 2 7 8 1 4 9 6 10 5
291.90