日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2-10 [搞定!]出栈序列的合法性 (20 分)

發(fā)布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2-10 [搞定!]出栈序列的合法性 (20 分) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

給定一個最大容量為 M 的堆棧,將 N 個數(shù)字按 1, 2, 3, …, N 的順序入棧,允許按任何順序出棧,則哪些數(shù)字序列是不可能得到的?例如給定 M=5、N=7,則我們有可能得到{ 1, 2, 3, 4, 5, 6, 7 },但不可能得到{ 3, 2, 1, 7, 5, 6, 4 }。

輸入格式:

輸入第一行給出 3 個不超過 1000 的正整數(shù):M(堆棧最大容量)、N(入棧元素個數(shù))、K(待檢查的出棧序列個數(shù))。最后 K 行,每行給出 N 個數(shù)字的出棧序列。所有同行數(shù)字以空格間隔。

輸出格式:

對每一行出棧序列,如果其的確是有可能得到的合法序列,就在一行中輸出YES,否則輸出NO。

輸入樣例:

5 7 5 1 2 3 4 5 6 7 3 2 1 7 5 6 4 7 6 5 4 3 2 1 5 6 4 3 7 2 1 1 7 6 5 4 3 2

輸出樣例:

YES NO NO YES NO

借鑒了https://blog.csdn.net/wenqiang1208/article/details/75578653的思路

直觀的思路就是將入棧序列一個一個入棧,與出棧序列相比較,一樣就出棧,不一樣就繼續(xù)入棧,當(dāng)入棧序列和出棧序列都為空時,表示出棧順序合法。
——https://blog.csdn.net/wenqiang1208/article/details/75578653

需要倒一下待判斷的序列,先將3 2 1 7 5 6 4入棧,再依次出棧,并入新棧,獲得棧底為4->棧頂為3。
以下為本題的實(shí)現(xiàn)

#include <iostream> #include <stack> using namespace std; stack <int> popf; stack <int> popv; stack <int> pushv;void check(int m,int n); int main(){int m,n,k;int i;cin>>m>>n>>k;check(m,n);for(i=1;i<k;i++){cout<<endl;check(m,n);}return 0; } void check(int m,int n) {int i,t,flag=1;for(i=0;i<n;i++){cin>>t;popf.push(t);}for(i=0;i<n;i++){popv.push( popf.top() );popf.pop();}for(i=1;i<=n;i++){if(pushv.size()>=m){flag = 0;break;}pushv.push(i);while(!pushv.empty()&&pushv.top() == popv.top()){pushv.pop();popv.pop();}}if(popv.empty()&&flag)cout<<"YES";elsecout<<"NO";while(!popv.empty()){popv.pop();}while(!pushv.empty()){pushv.pop();} }

總結(jié)

以上是生活随笔為你收集整理的2-10 [搞定!]出栈序列的合法性 (20 分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。