貪心 洛谷P1223 排隊接水問題

2021-10-07 10:47:27 字數 1140 閱讀 6349

題目描述

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

輸入格式

第一行為乙個整數 n。

第二行 n個整數,第 i 個整數 ti 表示第 i個人的等待時間 ti 。

輸出格式

輸出檔案有兩行,第一行為一種平均時間最短的排隊順序;第二行為這種排列方案下的平均等待時間(輸出結果精確到小數點後兩位)。

輸入輸出樣例

輸入10

56 12 1 99 1000 234 33 55 99 812

輸出

3 2 7 8 1 4 9 6 10 5

291.90

說明/提示

n <= 1000,ti <=10^6 不保證 ti不重複。

當 ti重複時,按照輸入順序即可(sort 是可以的)

思路

使用sort函式進行從小到大的排序,因為要計算平均等待時間,後者的等待時間裡會包含前者接水的時間,所以應該先讓接水時間少的人先接水,這樣後接水的人等的時間會短一些。

#include

#include

#include

using

namespace std;

typedef

long

long ll;

typedef

struct

wnode;

bool

cmp(wnode a,wnode b)

intmain()

sort

(a,a+n,cmp)

;for

(int i=

0;i)for

(int i=

0;i)printf

("\n");

printf

("%.2lf",(

double

)(ans*

1.0/n));

}

洛谷 P1223 排隊接水(貪心)

有n個人在乙個水龍頭前排隊接水,假如每個人接水的時間為ti請程式設計找出這n個人排隊的一種順序,使得n個人的平均等待時間最小。標準的貪心,將接水時間最短的排在最前面即可。include using namespace std define int long long define ios ios s...

洛谷 P1223 排隊接水

這一題是貪心來求解問題,讓小的在前面,大的在後面,就是貪心下的最優解 這裡使用一下priority queue優先佇列在做,這個是stl容器 下面是 include include include include include using namespace std typedef pair in...

洛谷P1223 排隊接水

這裡主要想記一下強制型別轉換可能也需要浪費時間?一開始我是把sum定義為 int型別,下面的double s2 double sum n 有兩組資料死活跑不過,也不知道為啥,希望路過的大佬能給小弟看看。方法1 定義兩個陣列,乙個存資料,乙個存編號。include using namespace st...