網易瘋狂佇列
題目來源:
題目描述:
小易老師是非常嚴厲的,它會要求所有學生在進入教室前都排成一列,並且他要求學生按照身高不遞減的順序排列。有一次,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
解析:
規律題,首先對陣列從小到大排序。例如:
1、先排最大值。
2、然後在最大的兩端分別插入當前最小的兩個值,小的向後插入,大的向前插入。
3、然後在兩端分別插入當前最大的兩個值,大的向後插入,小的向前插入。
4、重複2、3,直至所有的資料全部插入。如下:
5、微調資料(對於相等元素較多的情況,如下)。
#include <iostream>
#include <deque>
#include <vector>
#include <algorithm>
using namespace std;
deque <int> q;//雙端佇列
int main()
{
int n, a;
vector <int> arr;
cin>>n;
for(int i = 0; i < n; ++i)
{
cin>>a;
arr.push_back(a);
}
sort(arr.begin(), arr.end());
q.push_back(arr[n-1]);
int j = n-2, num = 1;
int i = 0;
while(num < n)
{
if(num >= n)
break;
if(num < n)//兩端分別插入當前最小的兩個值,小的向後插入,大的向前插入
{
q.push_back(arr[i++]);
num++;
if(num >= n)
break;
q.push_front(arr[i++]);
num++;
}
if(num < n)//兩端分別插入當前最大的兩個值,大的向後插入,小的向前插入
{
q.push_back(arr[j--]);
num++;
if(num >= n)
break;
q.push_front(arr[j--]);
num++;
}
}
int sum = 0;
/**
original 10 10 10 20 20 50 50
---> 20 20 10 50 10 50 10 ===> 170
mv first to last position ---> 20 10 50 10 50 10 20 ===> 180
*/
if(abs(q[0] - q[1]) < abs(q[n-1] - q[0]))//對於相等的數很多的時候,會有上例情況出現,所以要調整一下
{
q.push_back(q.front());
q.pop_front();
}
for(int i = 1; i < n; ++i)
{
sum += abs(q[i] - q[i-1]);
}
cout<<sum<<endl;
return 0;
}
相關文章
- 網際網路人,瘋狂做副業YPT
- 瘋狂的沙王
- 瘋狂學習——DP!
- 瘋狂ajax講義
- 小丑路人瘋狂吧
- 網易雲音樂的訊息佇列改造之路佇列
- 騰訊“瘋狂”開源!
- 京東正在瘋狂招人。。。
- 《蛋仔派對》:各大主播的技能秀,瘋狂亂鬥徹底瘋狂
- 93-臭蟲也瘋狂
- 瘋狂刪除tomcat日誌Tomcat
- “瘋狂”的數字孿生
- 【Luogu1616】瘋狂的採藥
- 瘋狂的遊戲代言人!遊戲
- 數字馬力正在瘋狂招人。。
- 特斯拉人,瘋狂買車配RZC
- 瘋狂的 Vue3 之 SetupVue
- Ivan Zanotti 與他瘋狂的作品
- 基於Redis的簡易延時佇列Redis佇列
- 佇列、阻塞佇列佇列
- “瘋狂的小貝”強勢來襲,打造“星際”網際網路絡
- 2024-4-11 瘋狂星期四
- AI正在瘋狂尋找Know-HowAI
- 瘋狂Java講義第3版PDFJava
- 佇列-單端佇列佇列
- 佇列 和 迴圈佇列佇列
- 【佇列】【懶排序】佇列Q佇列排序
- 那些年我之瘋狂的超能力
- 瘋狂java07--物件導向的陷阱Java物件
- 更新了!帶Agent的Cursor太瘋狂了
- 《Everhood》:何等瘋魔才能創造如此癲狂
- 陣列模擬佇列 以及佇列的複用(環形佇列)陣列佇列
- win10 1909瘋狂讀硬碟怎麼解決_win10電腦硬碟瘋狂讀寫修復方法Win10硬碟
- 佇列 手算到機算 入門 佇列 迴圈佇列佇列
- 圖解--佇列、併發佇列圖解佇列
- 單調佇列雙端佇列佇列
- 佇列佇列
- 《瘋狂的動物》專案詳情介紹
- AI在用 | 爆改工位文案,大模型也瘋狂AI大模型