演算法競賽高階指南 0x11 (棧)火車進棧

2021-10-18 21:38:40 字數 1486 閱讀 2860

兩個操作圖中1操作是火車進棧,2是火車出棧,因為要按照字典序輸出,應該先執行操作2,執行操作1來保證字典序正確

直接用dfs來暴力模擬過程,即可輸出答案

#include

using

namespace std;

int n,cnt=20;

vector<

int> state1;

stack<

int> state2;

int state3=1;

void

dfs(

)//先進行操作2

if(state2.

size()

)//然後再執行操作1

if(state3<=n)

}int

main()

因為題中資料範圍很小,所以我們可以用全排列去列舉所有的排列組合,然後判斷這個排列是否滿足火車進出棧的順序即可,輸出20中即可(不夠全輸出)

如何判斷順序滿足:具體看**

#include

using

namespace std;

const

int n =25;

int n;

//判斷序列是否滿足進出棧順序

bool

testlegal

(int stack_out)

for(

int i =

0; i < n; i++

)int j =0;

for(

int i =

0; i < n; i++)}

return

(st.

size()

==0)?

true

:false;}

intmain()

int res=0;

while

(res<20)

}if(cnt==n)}if

(testlegal

(s))

cout << endl;

}//返回s的下乙個字典序排列

next_permutation

(s, s + n);}

return0;

}

演算法競賽高階指南 0x11 棧 Editor

通過觀察我們可以將這個序列通過2個棧和2個陣列來維護5種操作進而達到題解,為了方便,直接用陣列來模擬棧 stkl n 游標左邊的棧 stkr n 游標右邊的棧 tl 左棧指標 tr 右棧指標 s n 字首和陣列 f n 最大字首和 對於第乙個操作,在游標處插入x,就是給stkl 的棧頂插入乙個x,字...

《演算法競賽高階指南》火車進出棧問題

一列火車n節車廂,依次編號為1,2,3,n。每節車廂有兩種運動方式,進棧與出棧,問n節車廂出棧的可能排列方式有多少種。輸入格式 輸入乙個整數n,代表火車的車廂數。輸出格式 輸出乙個整數s表示n節車廂出棧的可能排列方式數量。資料範圍 1 n 60000 輸入樣例 3輸出樣例 5看到這種問題我們首先想到...

演算法競賽高階指南 0x00

快速冪模板,寫一下快速冪的原理。我們知道,乙個數 n 在二進位制 也可以是其他進製 下可以被表示為 a 1 a 2 2 1 a 3 2 2 a m 2 那麼我們可以考慮將其分拆成二進位制狀態下的每一位,然後做冪運算。這樣做的時間複雜度為 o log 2 n 實現的過程類似於倒過來的分治 當然也可以直...