題意:對棧的操作,有兩個棧
a ,
b然後接下來n組操作包括入棧,出棧,合併棧。合併棧按入棧的時間順序進行排序。
官方題解:比較簡單巧妙的乙個做法是引入乙個新的棧
c ,每次合併的時候就把a和
b 合併到
c上,然後把
a 和
b都清空. pu
sh還是按正常做,po
p 注意當遇到要pop的棧為空時,因為題目保證不會對空棧進行pop操作,所以這時應直接改為對
c 棧進行po
p操作. 這樣做因為保證每個元素最多隻在一次合併中被處理到,pop和push操作當然也是每個元素只做一次,所以總複雜度是o(
n)的. 另一種做法是用鍊錶來直接模擬,複雜度也是o(
n),但**量稍大一些.
解題思路:比賽時怎麼想都想不出來,一直只想著是要合併兩個棧,但強行排序肯定是會tl
e 的,看了題解之後才知道原來這麼簡單,還是自己太弱了。直接用三個陣列進行模擬了一下。
ac**:
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define ll long long
#define maxn 100050
struct test
;test a[maxn];
test b[maxn];
test c[maxn];
int main()
else
}else
if(str1[1]=='e')///合併操作
else
}while(iawhile(ib0; idb=0;
}else
if(str1[1]=='o')///出隊操作
else}}
}return
0;}
hdu5818棧的操作
比較簡單巧妙的乙個做法是引入乙個新的棧c,每次合併的時候就把a和b合併到c上,然後把a和b都清空.push還是按正常做,pop注意當遇到要pop的棧為空時,因為題目保證不會對空棧進行pop操作,所以這時應直接改為對c棧進行pop操作.這樣做因為保證每個元素最多隻在一次合併中被處理到,pop和push...
hdu多校題解
給定 n 求 sum limits sum mu d frac sum frac 再令 h n sum frac 則有 g n frac sum mu d frac h frac 推導 f 和 g 的關係 f n f sum limits frac sum limits g n g f n f 2 ...
hdu多校(一)1009(棧模擬 數學)
leading robots 題意 已知機械人v t a tv t a t v t a t,現有n nn個機械人,給定機械人的當前位置pos itio nposition positi on,加速度a aa。問經過無限長的時間後,有多少個機械人當過第一位?思路 沒啥思路,最後肯定是a最大的機械人排在...