zoukankan      html  css  js  c++  java
  • luogu P1223 排队接水

    P1223 排队接水

    题目描述

    有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不重复

    简单的贪心:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #define ll long long
    
    using namespace std;
    const int N=1010;
    
    struct node{
        ll me,tim;
    }E[N];
    ll sum[N];
    
    bool cmp(node a,node b)
    {
        return a.tim<b.tim;
    }
    
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&E[i].tim);
            E[i].me=i;
        }
        sort(E+1,E+n+1,cmp);
        sum[1]=E[1].tim;
        for(int i=2;i<=n;i++)
            sum[i]+=(sum[i-1]+E[i].tim);
        for(int i=1;i<=n;i++)
            sum[i]-=E[i].tim;
        double answer(0);
        for(int i=1;i<=n;i++)
            answer+=sum[i];
        for(int i=1;i<=n;i++)
            printf("%lld ",E[i].me);
        printf("
    ");
        printf("%.2lf",answer/n);
        return 0;
    }
    /*
    10 
    56 12 1 99 1000 234 33 55 99 812
    */
  • 相关阅读:
    loj#6433. 「PKUSC2018」最大前缀和(状压dp)
    PKUWC2019游记
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
    7. Reverse Integer
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/7073376.html
Copyright © 2011-2022 走看看