歷屆試題 小朋友排隊
時間限制:1.0s 記憶體限制:256.0mb
問題描述
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。
#include
#include
using namespace std;
#define max 100005
struct point
;point l[max],r[max],c[max];
void merge(point *a,int first,int last)//歸併時,上陣列的第乙個元素與下陣列的第乙個元素相等,上陣列的指標右移
else
}while(q<=last)//下陣列有剩餘
q--;
while(p<=mid)//上陣列有剩餘,也就是說下陣列的所有元素都比上陣列剩下的元素小,故上陣列每個元素t加q-mid,也就是下陣列的元素個數
int i=first;
for(;i<=last;i++)
}void mergesort(point *a,int first,int last)
int mid=(first+last)/2;
mergesort(a,first,mid);
mergesort(a,mid+1,last);
merge(a,first,last);
}int main()
mergesort(l,0,n-1);
long long sum=0;//數的範圍
for(i=0;i
printf("%lld\n",sum);
return 0;
}
藍橋 歷屆試題 小朋友排隊
問題描述 傳送門 n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度增加1,如果第二次要求他交換,則他的不高興程度增加2 即不高興...
藍橋杯 歷屆試題 小朋友排隊
歷屆試題 小朋友排隊 時間限制 1.0s 記憶體限制 256.0mb 問題描述 n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度...
歷屆試題 小朋友排隊 樹狀陣列
歷屆試題 小朋友排隊 時間限制 1.0s 記憶體限制 256.0mb 問題描述 n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度...