zoukankan      html  css  js  c++  java
  • 洛谷1223 排队接水

    题目描述

    有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。

    输入输出格式

    输入格式:
    输入文件共两行,第一行为n;第二行分别表示第1个人到第n个人每人的接水时间T1,T2,…,Tn,每个数据之间有1个空格。

    输出格式:
    输出文件有两行,第一行为一种排队顺序,即1到n的一种排列;第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。

    输入输出样例

    输入样例#1: 复制
    10
    56 12 1 99 1000 234 33 55 99 812
    输出样例#1: 复制
    3 2 7 8 1 4 9 6 10 5
    291.90
    说明

    n<=1000

    ti<=1e6,不保证ti不重复

    当ti重复时,按照输入顺序即可(sort是可以的)

    贪心,让接水时间最少的人先接水后面的人等待时间最短。因为要输出序号,所以用结构体。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1005;
    int n,cnt;
    double ans;
    struct person {
        int time,num;         //time表示每个人接水所用时间,num表示每个人的序号。
    } per[maxn];
    inline int cmp(person x,person y){   
        return x.time<y.time;             
    }
    int main() {
        scanf("%d",&n);
        for(register int i=1; i<=n; i++) {
            scanf("%d",&per[i].time);
            per[i].num=i;
        }
        sort(per+1,per+1+n,cmp);
        cnt=n-1;
        for(register int i=1; i<=n; i++) {
            ans+=(per[i].time*cnt);
            cnt--;
            printf("%d ",per[i].num);
        }
        printf("
    ");
        ans/=n;
        printf("%.2lf",ans);
    }
  • 相关阅读:
    拖拽更改窗口大小
    一个窗口移动时,另一个窗口跟随移动
    xcode使用技巧
    同一个解决方案中,多个项目间相互引用,无法打开源文件
    截图时窗口自动识别
    C++使用sqlite时,中文字符显示乱码问题
    sqlite3配置与使用
    duilib控件与属性说明
    xml文件编写
    线程及安全相关
  • 原文地址:https://www.cnblogs.com/sdfzsyq/p/9677189.html
Copyright © 2011-2022 走看看