題目描述
有n個人在一個水龍頭前排隊接水,假如每個人接水的時間爲Ti,請編程找出這n個人排隊的一種順序,使得n個人的平均等待時間最小。
輸入輸出格式
輸入格式:
輸入文件共兩行,第一行爲n;第二行分別表示第1個人到第n個人每人的接水時間T1,T2,…,Tn,每個數據之間有1個空格。
輸出格式:
輸出文件有兩行,第一行爲一種排隊順序,即1到n的一種排列;第二行爲這種排列方案下的平均等待時間(輸出結果精確到小數點後兩位)。
輸入輸出樣例
輸入樣例#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
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 1001;
struct P
{
int t,r;
}p[maxn];
int cmp(P a, P b)
{
return a.t < b.t;
}
int main()
{
int n;
double sum = 0.00;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> p[i].t;
p[i].r = i;
}
sort(p+1, p+n+1, cmp);
for (int i = 1; i <= n; i++)
{
cout << p[i].r << " ";
sum += p[i].t * (n - i);
}
printf ("\n%.2f\n", sum / n);
return 0;
}