思路:需要记录下标进行排序,因此可以使用结构体来存储每个人所用时间和下标(初始位置)。又因为要求平均排队时间最短,所以要把时间短的排在前面,利用sort可以快速排序。最终输出排序后的下标顺序,然后遍历计算总等待时间除以总人数并输出即可。
AC:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct pre
{
int b,num;
}a[1010];
bool cmp(pre x,pre y){ return x.b<y.b; }
int main()
{
int n,i,j;
cin >> n;
for(i=1;i<=n;i++)
{
cin>>a[i].b;
a[i].num=i;
}
sort(a+1,a+n+1,cmp);
for(i=1;i<=n;i++)
cout << a[i].num << " ";
cout << endl;
double time=0.0;
for(i=0;i<=n;i++)
{
time+=a[i].b*(n-i);
}
printf("%.2lf",time/n);
return 0;
}