P1223 排队接水
题目描述
有 n 个人在一个水龙头前排队接水,假如每个人接水的时间为T
,请编程找出这 n个人排队的一种顺序,使得 n 个人的平均等待时间最小。
大家在做到时候只需要知道节水时间越短,那平均时间就用的越少,所以可以从小到大排序后直接计算就可以了。
#include <bits/stdc++.h>
using namespace std;
struct water{
int value;
int temp;
};
int compare(water a,water b){
if(a.value<b.value){
return 1;
}
else
return 0;
}
int main(){
int n;
cin>>n;
water a[n];
for(int i=0;i<n;i++){
cin>>a[i].value;
a[i].temp=i+1;
}
sort(a,a+n,compare);
double average=0;
int flag=0;
double sum=0;
for(int i=1;i<n;i++){
flag+=a[i-1].value;
sum+=flag;
}
for(int i=0;i<n;i++){
if(i==n-1){
cout<<a[i].temp<<endl;
}
else{
cout<<a[i].temp<<" ";
}
}
average =sum/n;
printf("%.2f",average);
return 0;
}```