小朋友排隊

2021-06-21 22:55:26 字數 1523 閱讀 1174

n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。  

每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。  

如果某個小朋友第一次被要求交換,則他的不高興程度增加1,如果第二次要求他交換,則他的不高興程度增加2(即不高興程度為3),依次類推。當要求某個小朋友第k次交換時,他的不高興程度增加k。  

請問,要讓所有小朋友按從低到高排隊,他們的不高興程度之和最小是多少。  

如果有兩個小朋友身高一樣,則他們誰站在誰前面是沒有關係的。  

【資料格式】  

輸入的第一行包含乙個整數n,表示小朋友的個數。

第二行包含 n 個整數 h1 h2 „ hn,分別表示每個小朋友的身高。     輸出一行,包含乙個整數,表示小朋友的不高興程度和的最小值。  

例如,輸入: 3 3 2 1 

程式應該輸出: 9  

【樣例說明】 

首先交換身高為3和2的小朋友,再交換身高為3和1的小朋友,再交換身高為2和1的小朋友,每個小朋友的不高興程度都是3,總和為9。   

【資料規模與約定】 

對於10%的資料, 1<=n<=10;     對於30%的資料, 1<=n<=1000;     對於50%的資料, 1<=n<=10000; 

對於100%的資料,1<=n<=100000,0<=hi<=1000000。   

資源約定: 

峰值記憶體消耗 < 256m cpu消耗  < 1000ms   

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入...」 的多餘內容。  

所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。  

注意: main函式需要返回0 

注意: 只使用ansi c/ansi c++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。 注意: 所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。  

提交時,注意選擇所期望的編譯器型別。

#include

#include

#include

#include

using namespace std; 

struct people

; struct cmp  

}; people arr[100005], sortarr[100005]; 

int main()

//memcpy(sortarr, arr, sizeof(people) * n); 

sort(sortarr, sortarr + n, cmp()); 

for(int i = 0; i < n; i++)   

arr[i] = temp;  } 

int sum = 0; 

for(int i = 0; i < n; i++)   

sum += (arr[i].step + 1) * arr[i].step / 2; 

printf("%d", sum); 

return 0; 

小朋友排隊

問題描述 n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度增加1,如果第二次要求他交換,則他的不高興程度增加2 即不高興程度為3...

小朋友排隊

n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度增加1,如果第二次要求他交換,則他的不高興程度增加2 即不高興程度為3 依次類推...

小朋友排隊

問題描述 n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度增加1,如果第二次要求他交換,則他的不高興程度增加2 即不高興程度為3...