1. 程式人生 > >【貪心+排序】排隊接水 luogu-1223

【貪心+排序】排隊接水 luogu-1223

esp 貪心 人在 puts typedef getchar() 順序 getchar long

題目描述

有n個人在一個水龍頭前排隊接水,假如每個人接水的時間為Ti,請編程找出這n個人排隊的一種順序,使得n個人的平均等待時間最小。

分析

註意要開longlong

AC代碼

#include <bits/stdc++.h>
using namespace std;
const int maxn=1005;
typedef long long ll;
struct record{
    int sum,id;
}a[maxn];
int n;
inline int read(){
    int w=0,X=0;char ch=0;
    while (!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    while (isdigit(ch)) {X=(X<<1)+(X<<3)+(ch^48);ch=getchar();}
    return w?-X:X;
}
bool cmp(record a,record b){
    if (a.sum!=b.sum) return a.sum<b.sum;
    return a.id<b.id;
}
int main(){
    n=read();
    for (int i=1;i<=n;i++) a[i].sum=read(),a[i].id=i;
    sort(a+1,a+1+n,cmp);
    for (int i=1;i<=n;i++) printf("%d ",a[i].id); puts("");
    ll ans=0;
    for (int i=1;i<=n;i++) ans+=(n-i)*a[i].sum;
    printf("%0.2lf\n",(1.0*ans)/(1.0*n));
    return 0;
}

【貪心+排序】排隊接水 luogu-1223