排队打水
题目描述
有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。
输入
第一行为n(n≤1000);
第二行n个整数,表示每人的接水时间T1,T2,…,Tn(0≤Ti≤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 }
如有错误,请指正,感谢!