洛谷P1223 排隊接水

題目描述

有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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章