排隊接水 題解

2021-10-05 11:25:10 字數 1836 閱讀 2461

題目描述

有 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

接下來說題目

這道題是貪心 & 排序

要事得時間最少

我們需要從小到大排序

for

(int i=

1;i<=n;i++)}

}

這樣我們就能確定時間最少

接下來就是算時間

如果說用迴圈做就太麻煩了

所以需要找出乙個公式

先從計算過程下手

後面的人需要等第乙個人

而且後面所有人都要等他

後面的人需要等第二個人

而且後面所有人都要等他

後面的人需要等第三個人

而且後面所有人都要等他

以此類推

由此

我們知道這其實有點像乙個樓梯

抱歉,第9個人他等待時間沒有他自己

t=t+(a[i]*(n-i));

for

(int i=

1;i<=n-

1;i++

)

#include

#include

using

namespace std;

int n,a[

10000+5

],b[

10000+5

],c[

10000+5

],k=10;

double t=0;

intmain()

for(

int i=

1;i<=n;i++)}

}for

(int i=

1;i<=n-

1;i++

)//cout

(int i=

1;i<=n;i++

) t=t/n;

cout<

cout<

setprecision(2

)<

return0;

}

有問題可以在下邊提出來記

排隊接水(貪心)

題目描述 有n個人在乙個水龍頭前排隊接水,假如每個人接水的時間為ti,請程式設計找出這n個人排隊的一種順序,使得n個人的平均等待時間最小。冒泡泡 第一行 n n 1000 第二行 第乙個人到第n個人每人的接水時間t1,t2,tn,每個資料之間有乙個空格 第一行 一種排隊順序,即1到n的一種排列 第二...

P1223 排隊接水 題解

這個題是標準的貪心題目,只要保證按照耗費時間從小往大排列就可保證整個序列等待時間最短。但是還是有一些問題需要注意 1 第乙個最後的結果如果用float會溢位,爆掉五個點。2 二維陣列的sort排序 include include using namespace std int a newint 10...

51nod排隊接水

n個人一起排隊接水,第i個人需要b i 的時間來接水。1 n 1000 0 b i 1000 同時只能有乙個人接水,正在接水的人和沒有接水的人都需要等待。完成接水的人會立刻消失,不會繼續等待。你可以決定所有人接水的順序,並希望最小化所有人等待時間的總和。input 第一行乙個整數n 接下來n行,每行...