题解 P1223 【排队接水】

Scandium

2019-01-12 18:37:52

Solution

## 又是水题一道!! ### 思路: #### 用一个结构体将当前这个人的编号和用时存起来,然后一个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; //华丽的收尾 } ```