问题描述
有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。
输入文件
第一行为n(≤1000);
第二行分别表示第1个人到第n 个人每人的接水时间T1,T2,…,Tn,每个数据之间有1个空格。
输出文件
一个数,平均等待时间(输出结果精确到小数点后两位)。
输入样例
10
56 12 1 99 1000 234 33 55 99 812
输出样例
291.90
#include<bits/stdc++.h>
using namespace std;
struct Edge
{
int num,id;
} a[1000];
int cmp(Edge x,Edge y)
{
if(x.num==y.num) return x.id<y.id;
else return x.num<y.num;
}
int main()
{
int n,i,sum=0;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i].num;
a[i].id=i+1;
}
sort(a,a+n,cmp);
for(i=0;i<n;i++)
{
sum+=a[i].num*(n-i-1);
}
printf("%.2f",sum*1.0/n);
return 0;
}