有 nn 个人在一个水龙头前排队接水,假如每个人接水的时间为 t_iti,请编程找出这 nn 个人排队的一种顺序,使得 nn 个人的平均等待时间最小。
输入格式
第一行一个整数 n\ (1 \le n \le 1000)n (1≤n≤1000),表示排队的人数。
第二行 nn 个整数 t_i\ (1\le t_i \le 10^6)ti (1≤ti≤106),表示每个人接水的时间。
输出格式
第一行为一种排队顺序,即 11 到 nn 的一种排列;
第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。
如果两种方案的平均等待时间相同,输出字典序更小的方案。
#include<stdio.h>
struct Time{
long long time;
int no;
}t[10000],tmp;
int main(){
int n;
scanf("%d",&n);
int i,j,k;
for(i=0;i<n;i++){
scanf("%lld",&t[i].time);
t[i].no=i+1;
}
for(i=0;i<n;i++){
for(j=n-1;j>i;j--){
if(t[j].time<t[j-1].time){
tmp=t[j];
t[j]=t[j-1];
t[j-1]=tmp;
}
}
}
long long sum=0;
for(i=0;i<n;i++){
printf("%d ",t[i].no);
sum+=(n-i-1)*(t[i].time);}
printf("\n%.2f",1.0*sum/n);
return 0;
}