资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
有N个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得N个人的平均等待时间最小。
输入格式
输入文件:共两行,每一行为N,第二行表示第1至N个人每人的接水时间Ti。
输出格式
输出文件:两行,每一行为一种排队顺序,即1到N的一种排列;第二行为这种排列下的平均等待时间。(精确到小数点后两位)
样例输入
10
56 12 1 99 1000 234 33 55 99 812
样例输出
3 2 7 8 1 4 9 6 10 5
291.90
数据规模和约定
n<=1000
0<=Ti<=100
import java.awt.List;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int[] s=new int[n];
int[] f=new int[n];//用于标记,标记是否用过。
int[] w=new int[n];;//表示等待的时间。
for(int i=0;i<s.length;i++)
s[i]=scanner.nextInt();
int min=0;
int minj=0;
int sum=0;
for(int i=0;i<n;i++) {
//进行循环n次
for(int j=0;j<n;j++) {
if(f[j]==0) {
min=s[j];
minj=j;
break;
}
}
for(int j=minj+1;j<n;j++) {
if(s[j]<min&&f[j]==0) {
min=s[j];
minj=j;
}
}
//System.out.print((minj+1)+" ");
f[minj]=1;
w[minj]=sum;
sum+=min;
}
int num=0;
for(int i=0;i<w.length;i++)
num+=w[i];
//System.out.println();
//System.out.println(num);
double kk=(double)num/n;
System.out.printf("%.2f",kk);
}
}