藍橋杯 歷屆試題 小朋友排隊

2022-05-06 02:42:09 字數 2213 閱讀 9987

時間限制: 1sec 記憶體限制: 128mb 提交: 75 解決: 11

題目描述

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

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

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

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

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

樣例說明 

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

資料規模和約定 

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

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

第二行包含  n  個整數  h1  h2  …  hn,分別表示每個小朋友的身高。

輸出輸出一行,包含乙個整數,表示小朋友的不高興程度和的最小值。

樣例輸入

3 

3 2 1

樣例輸出

9

#include#define maxn 100010

struct

data

a[maxn],temp[maxn];

intn;

//long long ans;

long

long ans[100

];void merge(int l1,int r1,int l2,int

r2)

else

if(a[i].num>a[j].num)//

a[i,r1]都大於a[j]

}//剩下上陣列,那麼剩下的元素都要移動下陣列的元素個數

while(i<=r1)

while(j<=r2) temp[k++]=a[j++]; //

剩下下陣列,就不需要移動

for(i=0;itemp[i];

}void mergesort(int l,intr)}

int main(void

)

if(ans[0]0]=length;

}//printf("%lld",ans);

for(int i=ans[0];i>=1;i--) printf("%d"

,ans[i]);

//printf("\n");

return0;

}大致的思路:使用歸併排序的思想求逆序對的思想,劃分成為乙個上陣列,乙個陣列。

上陣列的元素往下陣列方向移動,下陣列的元素往上陣列方向移動。

上陣列的元素往下陣列方向移動,移動的長度是下陣列中小於該元素的個數;

下陣列的元素往桑陣列方向移動,移動的長度是上陣列中大於該元素的個數。

在結構體中記錄移動的次數。

由於資料較大,可以使用高精度加法進行計算。

注意:這裡使用long long 也是可以的

#include#define maxn 100010

struct

data

a[maxn],temp[maxn];

intn;

long

long

ans;

long

long ans[100

];void merge(int l1,int r1,int l2,int

r2)

else

if(a[i].num>a[j].num)//

a[i,r1]都大於a[j]

}//剩下上陣列,那麼剩下的元素都要移動下陣列的元素個數

while(i<=r1)

while(j<=r2) temp[k++]=a[j++]; //

剩下下陣列,就不需要移動

for(i=0;itemp[i];

}void mergesort(int l,intr)}

int main(void

) printf(

"%lld

",ans);

return0;

}

藍橋杯 歷屆試題 小朋友排隊

歷屆試題 小朋友排隊 時間限制 1.0s 記憶體限制 256.0mb 問題描述 n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度...

藍橋杯 歷屆試題 小朋友排隊 C

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

藍橋 歷屆試題 小朋友排隊

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