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<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    using namespace std;
    int n;
    struct date{
    int num;
    double s;
    }a[10010];
    double ans;
    int cmp(date b,date c){
    if(b.s==c.s)return b.num<c.num;
    return b.s<c.s;
    }
    int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
    cin>>a[i].s;
    a[i].num=i;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++)
    ans+=a[i].s*(n-i);
    ans=(double)ans/n;
    for(int i=1;i<=n;i++)
    cout<<a[i].num<<" ";
    cout<<endl;
    printf("%.2f",ans);
    }

  • 相关阅读:
    JavaScript中的事件循环
    CSS布局
    Tomcat相关
    C#参数中ref和out的区别
    angular启动4200端口后,如何停止监听4200端口
    表联接(交叉连接,内联,外联)
    如何使用vs自带的反编译工具Lldasm
    软件架构需要注意的几点,待补充。。。
    SqlServer中With(NOLOCK)
    TypeScript preview
  • 原文地址:https://www.cnblogs.com/linzeli/p/7497899.html
Copyright © 2011-2022 走看看