ACM練級日誌:HDU 4286 STL-雙端隊列 以及Presentaion Error

幹掉了去年天津賽區的一道題,還是很爽的,去年用雙向鏈表沒有做出來,今年用雙端隊列做出來了。

想法非常簡單,把整個序列切成三段,左邊一段,L-R一段,右邊一段,這樣移動指針就是隊列之間把隊頭/隊尾元素互相踢來踢去的問題了。增加刪除元素都很簡單,至於反轉,只需要用一個bool記錄當前是否是反轉狀態,然後在增加刪除移動時分類討論即可。


雙端隊列在STL裏有,我用了STL裏的是因爲感覺手寫不太好寫,容易出錯,畢竟前插可能還是挺麻煩的。記錄一下deque的幾個注意點:


首先要#include<deque>,然後聲明就是STL聲明: deque<int> q;

這個東西有一點比較好,就是它的迭代器是可以+1,+2……的,不用非得++,完全可以說l = q.begin()-1這樣的話。

而且似乎還支持q[4]這樣的訪問,碉堡了……


哦還有就是它的q.begin() 未必和靜態數組一樣,不是說你在前面插了個元素q.push_front(v),之後q.begin()就往左移一個(--)了,它指不定跑哪兒去了,所以要重新取……


列舉幾個常用方法:

q.begin() 開頭迭代器

q.end() 隊尾迭代器,依舊是左閉右開,所以這個是空的

q.push_back(v) 在隊尾加入v

q.push_front(v) 在隊頭加入v

q.front() 查詢隊頭元素

q.back() 查詢隊尾元素

q.pop_front() 刪掉隊頭元素

q.pop_back() 刪掉隊尾元素


之前RE了半天后來發現是q.begin()會亂動引起的,改了以後進入無限的PE,快瘋了。後來才發現是每行末尾空格的問題,OJ不會每行末尾過濾空格,這一點還是要記住的,for輸到最後一定要特判一下,別輸出多餘的空格……

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