瘋狂佇列 相鄰絕對值和最大

2022-08-29 00:12:29 字數 1508 閱讀 1373

小易老師是非常嚴厲的,它會要求所有學生在進入教室前都排成一列,並且他要求學生按照身高不遞減的順序排列。有一次,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

複製

100

思路:由中間向兩邊擴充套件,每次擴充套件都使得絕對值和最大(中間先最高,然後兩邊最低,然後兩邊最高)

#include#include

#include

#include

using

namespace

std;

int max(int a,int

b)else

}int

main()

sort(h,h+n);

deque

d;d.push_back(h[n-1

]);

int i=0,j=n-2

;

int f1=0

;

while(i<=j)

f1 = 0

; d.push_front(h[i]);

i++;

}else

f1 = 0

; d.push_front(h[j]);

j--;

} if(i>j)

k = max(abs(h[i]-d.back()),abs(h[j]-d.back()));

if(k == abs(h[i]-d.back()))

f1 = 0

; d.push_back(h[i]);

i++;

}else

f1 = 0

; d.push_back(h[j]);

j--;

}

}deque

::iterator it;

intfront;

int sum=0

;

for(it=d.begin();it!=d.end();it++)

else

//cout<<*it<<" "<}

cout

<}

絕對值最大

題目詳情 給你乙個陣列a n 請你計算出ans max a i a j 0 i,j 例如 a 則 a 0 a 0 1 1 2.a 0 a 1 1 4 5.a 0 a 2 1 3 2.a 1 a 1 4 4 8.a 1 a 2 4 3 1.a 2 a 2 3 3 6.所以ans 8.輸入描述 有多組測...

awk 取絕對值最大

root centos6 1 cat infile aaa 1 aaa 2 aaa 3 aaa 28 aaa 22 bbb 2 bbb 4 bbb 6 ccc 2 ccc 3 ccc 8 ccc 10 ddd 2 ddd 4 ddd 12 root centos6 1 root centos6 1 ...

1038 絕對值最大 ZZULIOJ

題目描述 輸入3個整數,輸出絕對值最大的那個數。輸入 輸入包含3個int範圍內的整數,用空格隔開。輸出 輸出三個數中絕對值最大的數,單獨佔一行。若絕對值最大的數不唯一,則輸出最先出現的那個。例如,若輸入為1 3 3,則輸出為 3 若輸入為1 3 3則輸出為3。樣例輸入 copy 1 2 3 樣例輸出...