洛谷-P1223 排队接水

洛谷-P1223 排队接水

原题链接:https://www.luogu.com.cn/problem/P1223


题目描述

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

输入格式

第一行为一个整数 n。

第二行 n 个整数,第 i 个整数 (T_i) 表示第 i 个人的等待时间 (T_i)

输出格式

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

输入输出样例

输入 #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

说明/提示

(nle1000,t_ile10^6),不保证 (t_i) 不重复。

(t_i) 重复时,按照输入顺序即可(sort 是可以的)

C++代码

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;

struct node {
    int id;
    int t;
    bool operator<(const node &y)const{
        if(y.t==t)
            return id<y.id;
        return t<y.t;
    }
}p[1000];

int main() {
    int n,i,time=0;
    double ans=0;
    cin>>n;
    for(i=0;i<n;++i) {
        p[i].id=i+1;
        cin>>p[i].t;
    }
    sort(p,p+n);
    for(i=0;i<n;++i) {
        cout<<p[i].id<<' ';
        ans+=time;
        time+=p[i].t;
    }
    printf("
%.2f
",ans/n);
    return 0;
}
原文地址:https://www.cnblogs.com/yuzec/p/12840509.html