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);
    }

  • 相关阅读:
    SQL语句集(转)
    Oracle 数据库 for update / for update nowait 的区别
    XML 关键字
    JAVA 操作 DBF 文件数据库
    Hibernate 懒加载和 Json 序列化冲突
    MYSQL 语法大全自己总结的
    php-laravel中间件使用
    php-表单验证
    php-laravel安装与使用
    iOS 关于权限设置的问题
  • 原文地址:https://www.cnblogs.com/linzeli/p/7497899.html
Copyright © 2011-2022 走看看