瘋狂隊列

牛客網鏈接
小易老師是非常嚴厲的,它會要求所有學生在進入教室前都排成一列,並且他要求學生按照身高不遞減的順序排列。有一次,n個學生在列隊的時候,小易老師正好去衛生間了。學生們終於有機會反擊了,於是學生們決定來一次瘋狂的隊列,他們定義一個隊列的瘋狂值爲每對相鄰排列學生身高差的絕對值總和。由於按照身高順序排列的隊列的瘋狂值是最小的,他們當然決定按照瘋狂值最大的順序來進行列隊。現在給出n個學生的身高,請計算出這些學生列隊的最大可能的瘋狂值。小易老師回來一定會氣得半死。
輸入描述:
輸入包括兩行,第一行一個整數n(1 ≤ n ≤ 50),表示學生的人數
第二行爲n個整數h[i](1 ≤ h[i] ≤ 1000),表示每個學生的身高

輸出描述:
輸出一個整數,表示n個學生列隊可以獲得的最大的瘋狂值。

如樣例所示:
當隊列排列順序是: 25-10-40-5-25, 身高差絕對值的總和爲15+30+35+20=100。
這是最大的瘋狂值了。

輸入例子1:
5
5 10 25 40 25

輸出例子1:
100

  • 首先先排序,每次提出首尾數字,然後根據奇偶性,注意最後一個數字的放置地方。
#include<iostream>
#include<algorithm>

using namespace std;

int main(){
    int n;
    cin>>n;

    int list[n];

    for(int i=0 ; i<n ; i++){
        cin>>list[i];
    }

    sort(list,list+n);

    int total=0;
    int j=1;
    int z = 0,t=0;
    if(n%2) t=1;
    else t =2;

    for(int i=0;i < n-t ; i++){
        z = i/2;
        if(j==1){
            total += abs(list[n-1-z]-list[z]);
        }else{
            total += abs(list[n-1-z]-list[z+1]);
        }
        cout<<total<<endl;
        j *= -1; 
    }
    total +=list[n/2]-list[0];

    cout<<total;

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章