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

  • 相关阅读:
    常用资料管理
    IIC学习笔记
    博客的开始
    试用Markdown编辑器
    裁剪方法--layer.makesToBounds 和 clipsToBounds区别和联系
    block循环引用问题--内存泄露
    UITextFiled/UITextView---占位文字的设置
    使用KVC取得私有成员变量时报连线错误
    Xcode开发--运行时runtime
    Xcode开发--屏蔽警告
  • 原文地址:https://www.cnblogs.com/linzeli/p/7497899.html
Copyright © 2011-2022 走看看