题解 P1223 【排队接水】
Scandium
2019-01-12 18:37:52
## 又是水题一道!!
### 思路:
#### 用一个结构体将当前这个人的编号和用时存起来,然后一个sort快排所用时间(小的在先)后输出对应编号,再把每个人的等待时间(前面所有人的用时和,不包括自己)加起来,除以人数,保留小数点后两位就好了.....
话不多说,贴代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
struct a{ //定义一个结构体
int bh; //编号
long long sj; //时间
}t[1005];
int cmp(const a i,const a j) //cmp让结构体也可以快排
{
return i.sj<j.sj;
}
int main()
{
int n;
double ans=0.00;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>t[i].sj; //读入,将编号存入结构体
t[i].bh=i;
}
sort(t+1,t+1+n,cmp); //快排
for(int i=1;i<=n;i++)
cout<<t[i].bh<<' ';
cout<<endl;
for(int i=2;i<=n;i++)
{
for(int j=1;j<i;j++) //由于第一个人不用等,i从2开始,j代表前面打水的人的编号
ans+=t[j].sj;
}
cout<<fixed<<setprecision(2)<<ans/n; //输出,保留2位小数
return 0; //华丽的收尾
}
```