網易瘋狂佇列
題目來源:
題目描述:
小易老師是非常嚴厲的,它會要求所有學生在進入教室前都排成一列,並且他要求學生按照身高不遞減的順序排列。有一次,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;
}
相關文章
- [瘋狂Java]陣列:Arrays(陣列工具類)Java陣列
- 騰訊“瘋狂”開源!
- 瘋狂學習——DP!
- 京東正在瘋狂招人。。。
- 瘋狂的遊戲代言人!遊戲
- 瘋狂的程式設計世界程式設計
- 瘋狂的程式設計師程式設計師
- 網易雲音樂的訊息佇列改造之路佇列
- 瘋狂的 Vue3 之 SetupVue
- 瘋狂的比特幣–資訊圖比特幣
- 瘋狂android講義目錄Android
- 數字馬力正在瘋狂招人。。
- 瘋狂刪除tomcat日誌Tomcat
- 瘋狂Java講義第3版PDFJava
- 網際網路人,瘋狂做副業YPT
- 如何遏制 PostgreSQL WAL 的瘋狂增長SQL
- 為什麼JavaScript開發如此瘋狂JavaScript
- 書摘:瘋狂的程式設計師程式設計師
- 瘋狂語文朗讀教學法
- 佇列、阻塞佇列佇列
- 佇列-單端佇列佇列
- AI正在瘋狂尋找Know-HowAI
- 瘋狂java07--物件導向的陷阱Java物件
- 讓ATM瘋狂吐錢的黑客死了黑客
- 面向切面程式設計之瘋狂的 Aspects程式設計
- 瘋狂的Web應用開源專案Web
- Android瘋狂的專利戰爭史記Android
- 你真的會玩SQL嗎?Case也瘋狂SQL
- 查詢瘋狂增長的arch-續
- 程式設計師,修女也瘋狂嗎 (轉)程式設計師
- 樹形查詢也瘋狂&優化措施優化
- 佇列 和 迴圈佇列佇列
- 【佇列】【懶排序】佇列Q佇列排序
- 《瘋狂的動物》專案詳情介紹
- 2018年微服務將瘋狂至死微服務
- OC語言瘋狂講義學習筆記C語言筆記
- 前員工爆料Google早期十個瘋狂故事Go
- 瘋狂連連看之開發遊戲介面元件開發遊戲元件