【貪心+排序】排隊接水 luogu-1223
阿新 • • 發佈:2018-09-14
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