排队打水

题目描述

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

 

输入

第一行为n(n≤1000);
第二行n个整数,表示每人的接水时间T1,T2,…,Tn(0≤Ti≤1000)。

 

输出

输出最小的平均等待时间(输出结果精确到小数点后两位)。

 

样例输入

10
56 12 1 99 1000 234 33 55 99 812

 

样例输出

291.90
贪心问题,按照从小到大排序即可。
平均等待时间是每个人等待的时间之和除以n
注意double类型
 1 #include <bits/stdc++.h>
 2  
 3 using namespace std;
 4  
 5 typedef long long ll;
 6 int n,a[10005];
 7 int main()
 8 {
 9 //    freopen("in.txt","r",stdin);
10     scanf("%d",&n);
11     for(int i=1;i<=n;i++)
12         scanf("%d",&a[i]);
13     sort(a+1,a+1+n);
14     double p=0;
15     for(int i=1;i<=n;i++)
16     {
17         p+=(n-i)*a[i];
18     }
19     double ans=p/(n*1.0);
20     printf("%.2lf\n",ans);
21     return 0;
22 }
View Code

 

posted @ 2018-08-03 18:43  Scott_Wong  阅读(331)  评论(0编辑  收藏  举报