洛谷-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

说明/提示

\(n\le1000,t_i\le10^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("\n%.2f\n",ans/n);
    return 0;
}
posted @ 2020-05-07 08:18  yuzec  阅读(249)  评论(0编辑  收藏  举报