2353排隊問題

2021-10-05 16:48:42 字數 1217 閱讀 8903

n個身高不同的小朋友,分別站在編號1-n的格仔裡,n個格仔排成1列。現在我們希望他們能夠按照身高的順序從低到高排成1列。按現在的順序給出n個小朋友的身高,問所有小朋友總共需要移動多少個格仔,才能按照身高從低到高的順序排好隊。注:從格仔3移動到格仔1,需要移動2個格仔。

例如:4個小朋友,身高分別是:

1220 1210 1200 1250

按照身高順序拍好後,應該是:

1200 1210 1220 1250,身高1200的小朋友需要移動2格,身高1210和1250的小朋友,不需要移動,身高1220的小朋友需要移動2格,4個小朋友總共需要移動2 + 2 = 4格。

input

第一行:乙個數n(1<=n<=10000)。 後面n行:每行1個數,表示小朋友的身高。

output

輸出所有小朋友移動距離之和。

sample input

41220

1210

1200

1250

sample output

4思路:這道題主要就是準備兩個陣列,用來查詢排序後的陣列元素。這道題說實話用c++來做特別的簡單,因為只需要用乙個sort函式和乙個lower_bound函式就可以解決問題。但是在這裡我還是以c語言為主吧,但是最後的那個相同元素查詢,我還是用了乙個函式,因為我對二分不是特別的熟練,加上我本人有點懶,所以見諒了。最後提醒一下,這個查詢千萬不能用順序查詢。用了就錯,我試驗無數次了

#include

//這個是c++的萬能標頭檔案

using namespace std;

int main (

void

)for

(int i=

0;i1;i++

)//這個排序可以直接用sort函式,很快。}}

for(

int i=

0;i) sum+=(

abs(i-

(lower_bound

(q,q+n,z[i]

)-q)))

;//我主要來解釋一些這個函式的用法。這個函式是找出我要求的那個數在給定陣列**現首個位址。引數的話,首先是陣列首位址,中間是陣列末位址,最後乙個引數是我所求的出現的數字。最後減去乙個陣列名,這個是c++約定俗成的。

printf

("%d"

,sum)

;return0;

}

那個函式要是用不慣的話,你們也可以手寫二分。

2956 排隊問題

題目描述 description 有n個學生去食堂,可教官規定 必須2人或3人組成一組,求有多少種不同分組的方法。輸入描述 input description 乙個數,n 輸出描述 output description 乙個數,即答案。樣例輸入 sample input 6 樣例輸出 sample ...

問題 1163 排隊買票

時間限制 1sec 記憶體限制 128mb 提交 484 解決 199 題目描述 有m個小孩到公園玩,門票是1元。其中n個小孩帶的錢為1元,k個小孩帶的錢為2元。售票員沒有零錢,問這些小孩共有多少種排隊方法,使得售票員總能找得開零錢。注意 兩個拿一元零錢的小孩,他們的位置互換,也算是一種新的排法。m...

2030 排隊打水問題

time limit 3 second memory limit 2 mb 有n個人排隊到r個水龍頭去打水,他們裝滿水桶的時間t1,t2,tn為整數且各不相等,應如何安排他們的打水順序才能使他們花費的總時間最少。輸入檔案兩行 第一行輸入打水人數n,水龍頭數r。用空格隔開 第二行依次輸入n個人的打水時...