目录
题目链接:
P1223 排队接水 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
思路:
结构体排序
至于为什么要让接水时间短的人排在前面,见下面这位大佬的解释:
要让平均排队时间最小,就要让接水时间短的人往前排。
代码:
#include<bits/stdc++.h>
using namespace std;
struct node{ //定义结构体
int t; //接水时间
int id; //接水的人的序号
}; //别忘了结构体最后面加分号,和类一样
struct node a[1010]; //定义结构体数组
bool cmp(node x,node y){ //定义"小于"运算符
return x.t<y.t;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].t; //输入第i个人的接水时间
a[i].id=i; //存序号
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
cout<<a[i].id<<" ";
}
cout<<endl;
double time=0; //总时间
for(int j=n-1;j>=1;j--){
int i=n-j; //i是当前要接水的人,也就是当前接水时间最短的人 ///当前最少时间的人序号 + 要等待的人数=n
time+=a[i].t*j;
}
printf("%.2f",time/n);
return 0;
}
结构体
struct node{ //定义结构体
int t; //接水时间
int id; //接水的人的序号
}; //别忘了结构体最后面加分号,和类一样
struct node a[1010]; //定义结构体数组