0
点赞
收藏
分享

微信扫一扫

洛谷P1223 排队接水

罗蓁蓁 2022-03-12 阅读 47

经过昨天那道题,今天这道就很简单了,就算不知道哪种顺序最佳,看给出的实例就能看从小到大排序,而且最后计算平均等待时间的时候也就明白为啥这样排最省时了。
看题解提供一种思路:换一种存数据的方式

struct wt{
    int o;
    int t;
}a[1001];
bool cmp(wt x,wt y) {
    return x.t<y.t;
}
int main() {
    int n;
    double s=0;
    cin>>n;
    for (int i=0;i<n;i++) {
        cin>>a[i].t;
        a[i].o=i+1;
    }
    sort(a,a+n,cmp);
    for(int i=0;i<n;i++) {
        cout<<a[i].o<<' ';
        if(i<n-1) s+=a[i].t*(n-i-1);
    }
    cout<<endl;
    cout<<fixed<<setprecision(2)<<s/n;
    return 0;
}

//选择排序回顾
for(int i=0;i<n-1;i++) {
        int min=i;
        for(int j=i+1;j<n;j++)
            if(t[j]<t[min]) min=j;
        swap(t[i],t[min]);
    }
 //
 int main() {
    int n,t[1001];
    double s=0;
    cin>>n;
    for(int i=0;i<n;i++) {cin>>t[i];t[i]=t[i]*1001+i+1;}
    sort(t,t+n);
    for(int i=0;i<n;i++) {
        cout<<t[i]%1001<<' ';
        if(i<n-1) s+=t[i]/1001*(n-i-1);
    }
    cout<<endl;
    cout<<fixed<<setprecision(2)<<s/n;
    return 0;
}
举报

相关推荐

E: 排队接水

洛谷p1135

洛谷p1551

洛谷P1309

洛谷 P1307

P1217(洛谷)

洛谷p1443

洛谷P1090

0 条评论